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.