Apache Pig - Operador de Cogroup
los COGROUPEl operador funciona más o menos de la misma manera que el operador GRUPO . La única diferencia entre los dos operadores es que elgroup El operador normalmente se usa con una relación, mientras que el cogroup El operador se usa en declaraciones que involucran dos o más relaciones.
Agrupar dos relaciones usando Cogroup
Supongamos que tenemos dos archivos a saber student_details.txt y employee_details.txt en el directorio HDFS /pig_data/ Como se muestra abajo.
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
Y hemos cargado estos archivos en Pig con los nombres de las relaciones student_details y employee_details respectivamente, como se muestra a continuación.
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);
Ahora, agrupemos los registros / tuplas de las relaciones student_details y employee_details con la edad clave, como se muestra a continuación.
grunt> cogroup_data = COGROUP student_details by age, employee_details by age;
Verificación
Verifica la relación cogroup_data utilizando el DUMP operador como se muestra a continuación.
grunt> Dump cogroup_data;
Salida
Producirá la siguiente salida, mostrando el contenido de la relación denominada cogroup_data Como se muestra abajo.
(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)})
los cogroup El operador agrupa las tuplas de cada relación según la edad, donde cada grupo representa un valor de edad particular.
Por ejemplo, si consideramos la primera tupla del resultado, se agrupa por edad de 21 años. Y contiene dos bolsas:
la primera bolsa contiene todas las tuplas de la primera relación (student_details en este caso) tener 21 años, y
la segunda bolsa contiene todas las tuplas de la segunda relación (employee_details en este caso) tener 21 años.
En caso de que una relación no tenga tuplas con el valor de edad 21, devuelve una bolsa vacía.