Apache Pig - Opérateur Cogroup

le COGROUPL'opérateur fonctionne plus ou moins de la même manière que l' opérateur GROUP . La seule différence entre les deux opérateurs est que legroup l'opérateur est normalement utilisé avec une relation, tandis que cogroup L'opérateur est utilisé dans les instructions impliquant deux ou plusieurs relations.

Regroupement de deux relations à l'aide de Cogroup

Supposons que nous ayons deux fichiers à savoir student_details.txt et employee_details.txt dans le répertoire HDFS /pig_data/ comme indiqué ci-dessous.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai

employee_details.txt

001,Robin,22,newyork 
002,BOB,23,Kolkata 
003,Maya,23,Tokyo 
004,Sara,25,London 
005,David,23,Bhuwaneshwar 
006,Maggy,22,Chennai

Et nous avons chargé ces fichiers dans Pig avec les noms de relation student_details et employee_details respectivement, comme indiqué ci-dessous.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray); 
  
grunt> employee_details = LOAD 'hdfs://localhost:9000/pig_data/employee_details.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, city:chararray);

Maintenant, regroupons les enregistrements / tuples des relations student_details et employee_details avec l'âge de la clé, comme indiqué ci-dessous.

grunt> cogroup_data = COGROUP student_details by age, employee_details by age;

Vérification

Vérifier la relation cogroup_data en utilisant le DUMP opérateur comme indiqué ci-dessous.

grunt> Dump cogroup_data;

Production

Il produira la sortie suivante, affichant le contenu de la relation nommée cogroup_data comme indiqué ci-dessous.

(21,{(4,Preethi,Agarwal,21,9848022330,Pune), (1,Rajiv,Reddy,21,9848022337,Hyderabad)}, 
   {    })  
(22,{ (3,Rajesh,Khanna,22,9848022339,Delhi), (2,siddarth,Battacharya,22,9848022338,Kolkata) },  
   { (6,Maggy,22,Chennai),(1,Robin,22,newyork) })  
(23,{(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336 ,Bhuwaneshwar)}, 
   {(5,David,23,Bhuwaneshwar),(3,Maya,23,Tokyo),(2,BOB,23,Kolkata)}) 
(24,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334, trivendram)}, 
   { })  
(25,{   }, 
   {(4,Sara,25,London)})

le cogroup L'opérateur regroupe les tuples de chaque relation en fonction de l'âge où chaque groupe représente une valeur d'âge particulière.

Par exemple, si nous considérons le 1er tuple du résultat, il est groupé par âge 21. Et il contient deux sacs -

  • le premier sac contient tous les tuples de la première relation (student_details dans ce cas) avoir 21 ans, et

  • le deuxième sac contient tous les n-uplets de la deuxième relation (employee_details dans ce cas) avoir 21 ans.

Dans le cas où une relation n'a pas de tuples ayant la valeur d'âge 21, elle retourne un sac vide.