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.