Apache Pig – Operador de cogroup

EN COGROUP El operador trabaja más o menos de la misma manera que el operador GRUPO. La única diferencia entre los dos operadores es que Grupo El operador generalmente se usa con una relación, mientras que el operador cogrupo El operador se usa en operadores 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 cargamos estos archivos en Pig con los nombres de las relaciones. Student_details y detalles sobre empleados 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 relaciones Student_details y detalles sobre empleados con una edad clave como se muestra a continuación.

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

Controlar

Verifica la conexión cogroup_data usando DUMP operador como se muestra a continuación.

grunt> Dump cogroup_data;

Salida

Producirá el siguiente resultado 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)})

EN cogrupo El operador agrupa las tuplas de cada relación según la edad, donde cada grupo muestra un valor de edad específico.

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) a la edad de 21 años, y

  • el segundo paquete contiene todas las tuplas de la segunda relación (detalles sobre empleados en este caso) a los 21 años.

Si la relación no tiene tuplas con un valor de edad de 21, devuelve una bolsa vacía.

🚫