Scénario : Agréger des données de deux relations à l'aide d'une opération COGROUP - 6.1

Composants Talend Guide de référence

EnrichVersion
6.1
EnrichProdName
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Data Integration
Talend Data Management Platform
Talend Data Services Platform
Talend ESB
Talend MDM Platform
Talend Open Studio for Big Data
Talend Open Studio for Data Integration
Talend Open Studio for Data Quality
Talend Open Studio for ESB
Talend Open Studio for MDM
Talend Real-Time Big Data Platform
task
Création et développement
Gouvernance de données
Qualité et préparation de données
EnrichPlatform
Studio Talend

Dans ce scénario, un Job comprenant quatre composants est créé pour agréger deux relations sur un cluster Hadoop donné.

Les deux relations utilisées dans ce scénario se présentent comme suit :

  1. Alice,turtle,17
    Alice,goldfish,17
    Alice,cat,17
    Bob,dog,18
    Bob,cat,18
    John,dog,19
    Mary,goldfish,16
    Bill,dog,20

    Cette relation se compose de trois colonnes nommées owner (maître), pet (animal) et age (des maîtres).

  2. Cindy,Alice
    Mark,Alice
    Paul,Bob
    Paul,Jane
    John,Mary
    William,Bill

    Cette relation fournit une liste de noms d'étudiants ainsi que de leurs amis. Pour certains, la première relation est celle de détenteurs d'animaux. Le schéma de cette relation contient deux colonnes : student (étudiant) et friend (ami).

Avant de reproduire ce scénario, vous devez écrire les données d'exemple dans le système HDFS du cluster Hadoop à utiliser. Pour ce faire, vous pouvez utiliser un tHDFSOutput. Pour plus d'informations concernant ce composant, consultez tHDFSOutput.

Les données utilisées dans ce scénario sont inspirées des exemples utilisés dans la documentation Pig pour expliquer les opérateurs GROUP et GOGROUP. Pour plus d'informations, consultez la documentation Apache pour Pig.

Relier les composants

  1. Dans la perspective Integration du Studio, créez un nouveau Job depuis le nœud Job Designs de la vue Repository.

    Pour plus d'informations sur la création de Jobs, consultez le Guide utilisateur du Studio Talend.

  2. Dans l'espace de modélisation graphique, saisissez le nom du composant à utiliser et sélectionnez ce composant dans la liste qui apparaît. Dans ce scénario, les composants utilisés sont : deux tPigLoad, un tPigCoGroup et un tPigStoreResult. L'un des tPigLoad est utilisé en tant que composant de chargement principal pour vous connecter au cluster Hadoop à utiliser.

  3. Reliez le composant tPigLoad au tPigCoGroup à l'aide d'un lien Row > Main.

  4. Répétez l'opération pour connecter le second tPigLoad au tPigCoGroup. Le libellé Lookup s'affiche sur ce lien.

  5. Répétez l'opération pour connecter le tPigCoGroup au tPigStoreResult.

Lire les données dans le flux Pig

Lire les données d'exemples relatives aux détenteurs d'animaux

  1. Double-cliquez sur le composant tPigLoad principal pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir l'éditeur du schéma puis cliquez trois fois sur le bouton [+] pour ajouter trois lignes.

  3. Dans la colonne Column, renommez les nouvelles lignes owner, pet et age, respectivement. Dans la colonne Type de la ligne age, sélectionnez Integer.

  4. Cliquez sur OK pour valider les modifications et accepter la propagation proposée par la boîte de dialogue qui s'ouvre.

  5. Dans la zone Mode, sélectionnez Map/Reduce pour utiliser le cluster Hadoop distant à utiliser.

  6. Dans les listes Distribution et Version, sélectionnez la distribution de Hadoop que vous utilisez. Dans cet exemple, sélectionnez HortonWorks Data Platform V2.1.0 (Baikal).

  7. Dans la liste Load function, sélectionnez PigStorage. Les paramètres à configurer s'affichent.

  8. Dans les champs NameNode URI et Resource manager, saisissez respectivement l'emplacement des services.

  9. Cochez la case Set Resourcemanager scheduler address et saisissez l'URI du service dans le champ qui s'affiche. Cela vous permet d'utiliser le service d'ordonnancement (Scheduler) défini dans le cluster Hadoop à utiliser. Si ce service n'est pas défini dans votre cluster, ignorez cette étape.

  10. Dans le champ User name, saisissez le nom de l'utilisateur possédant les droits pour écrire des données dans le cluster. Dans cet exemple, saisissez hdfs.

  11. Dans le champ Input file URI, saisissez le chemin d'accès à la relation de laquelle vous souhaitez lire des donnée. Comme expliqué précédemment, la relation à lire ici est celle contenant les données des maîtres et de leur animal.

  12. Dans le champ Field separator, saisissez le séparateur des données à lire. Dans cet exemple, saisissez un point-virgule ";".

Charger les données d'exemple relatives aux étudiants et leurs amis

  1. Double-cliquez sur le second tPigLoad pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir l'éditeur du schéma.

  3. Cliquez deux fois sur le bouton [+] pour ajouter deux lignes et, dans la colonne Column, renommez-les student et friend, respectivement.

  4. Cliquez sur OK pour valider ces modifications et acceptez la propagation proposée par la boîte de dialogue qui s'ouvre.

  5. Dans la zone Mode, sélectionnez Map/Reduce.

    Ce composant réutilise la connexion à Hadoop configurée dans le composant principal tPigLoad. Les listes Distribution et Version ont été automatiquement renseignées avec les valeurs du composant principal de chargement.

  6. Dans la liste Load function, sélectionnez la fonction PigStorage pour lire les données source.

  7. Dans le champ Input file URI, saisissez le répertoire où sont stockées les données source. Comme expliqué précédemment, ces données de la seconde relation contiennent les données des étudiants et de leurs amis.

Agréger les relations

  1. Double-cliquez sur le tPigCoGroup pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir l'éditeur de schéma.

  3. Cliquez cinq fois sur le bouton [+] pour ajouter cinq lignes et, dans la colonne Column, renommez-les owner_friend, age, pet_number, pet et student, respectivement.

  4. Dans la colonne Type de la ligne age, sélectionnez Integer.

  5. Cliquez sur OK pour valider ces modifications et acceptez la propagation par la boîte de dialogue qui s'ouvre.

  6. Dans la table Group by, cliquez sur le bouton [+] pour ajouter une ligne.

  7. Vous devez paramétrer les conditions de groupe dans la table Group by table pour agréger les deux relations d'entrée. Dans chaque colonne représentant la relation d'entrée, cliquez sur la nouvelle ligne et sélectionnez la colonne à utiliser pour composer la condition de groupe. Dans ce scénario, la colonne owner de la relation maître-animal et la colonne friend de la relation étudiant-ami sont sélectionnées car elles ont des enregistrements en commun. A partir de ces colonnes, les deux relations sont agrégées dans des bags (entre accolades).

    Les bags concernant l'enregistrement Alice se présentent comme suit :

    Alice,{(Alice,turtle,17),(Alice,goldfish,17),(Alice,cat,17)},{(Cindy,Alice),(Mark,Alice)}
  8. Dans la table Output mapping, le schéma de sortie défini précédemment a automatiquement renseigné la colonne Column. Vous devez renseigner cette table afin de définir comment les bags groupés sont agrégés dans le schéma de la relation de sortie. La liste suivante fournit plus de détails concernant la configuration de cette agrégation dans ce scénario :

    • La colonne owner_friend est utilisée pour recevoir les enregistrements provenant des colonnes utilisées comme condition de groupe. Pour cette raison, sélectionnez la fonction EMPTY dans la liste déroulante Function, pour que les enregistrements entrants restent tels qu'ils sont. Sélectionnez row1 dans la liste Source schema et owner dans la liste Expression pour lire les enregistrements de la colonne d'entrée correspondante. Vous pouvez également sélectionner row2 et friend, les enregistrements à recevoir sont les mêmes car les colonnes owner et friend sont jointes lorsqu'elles sont utilisées comme condition de groupe.

      Notez que le libellé row1 est l'ID du lien d'entrée et peut être différent dans votre scénario.

    • La colonne age est utilisée pour recevoir les données d'âge. Comme dans les bags dans l'étape précédente, l'âge d'un propriétaire apparaît de manière répétée dans l'un des bags après regroupement. Vous pouvez sélectionner la fonction AVG dans la liste Function pour calculer la moyenne des valeurs répétitives, comme l'âge qui apparaît une seule fois dans le résultat final. Sélectionnez row1 dans la liste Source schema et age dans la liste Expression.

    • La colonne pet_number est utilisée pour recevoir le nombre d'animaux d'une personne. Sélectionnez la fonction COUNT dans la liste Function pour effectuer le calcul. Sélectionnez row1 dans la liste Source schema et pet dans la liste Expression.

    • La colonne pet et la colonnestudent sont utilisées pour recevoir les enregistrements groupés des colonnes d'entrée pet et student, respectivement. Sélectionnez EMPTY pour les deux colonnes et, dans la liste Source schema de chacune, sélectionnez le schéma d'entrée correspondant. Dans la liste Expression, sélectionnez la colonne correspondante.

Ecrire les données agrégées

  1. Double-cliquez sur le tPigStoreResult pour ouvrir sa vue Component.

  2. Si ce composant n'a pas le même schéma que le composant précédent, une icône d'avertissement s'affiche. Dans ce cas, cliquez sur le bouton Sync columns afin de récupérer le schéma du composant précédent. Cela fait, l'icône disparaît.

  3. Dans le champ Result folder URI, saisissez le chemin d'accès dans HDFS pointant vers l'emplacement dans lequel vous souhaitez écrire les résultats.

  4. Cochez la case Remove result directory if exists.

  5. Dans la liste Store function, sélectionnez PigStorage.

  6. Dans le champ Field separator, saisissez le séparateur que vous souhaitez utiliser. Dans ce scénario, saisissez une virgule ",".

Exécuter le Job

Appuyez sur F6 pour exécuter le Job.

Cela fait, vérifiez les résultats du système HDFS que vous utilisez.

Vous pouvez voir, par exemple, que Alice a 17 ans, elle possède trois animaux : un chat, un poisson rouge et une tortue. Deux de ses amis s'appellent Mark et Cindy.