Apache Pig - Operatore Cogroup

Il COGROUPL'operatore funziona più o meno allo stesso modo dell'operatore GROUP . L'unica differenza tra i due operatori è che il filegroup L'operatore viene normalmente utilizzato con una relazione, mentre l'operatore cogroup L'operatore viene utilizzato nelle istruzioni che coinvolgono due o più relazioni.

Raggruppare due relazioni utilizzando Cogroup

Supponiamo di avere due file, vale a dire student_details.txt e employee_details.txt nella directory HDFS /pig_data/ come mostrato di seguito.

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

E abbiamo caricato questi file in Pig con i nomi delle relazioni student_details e employee_details rispettivamente, come mostrato di seguito.

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);

Ora, raggruppiamo i record / tuple delle relazioni student_details e employee_details con l'età chiave, come mostrato di seguito.

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

Verifica

Verifica la relazione cogroup_data usando il DUMP operatore come mostrato di seguito.

grunt> Dump cogroup_data;

Produzione

Produrrà il seguente output, visualizzando il contenuto della relazione denominata cogroup_data come mostrato di seguito.

(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)})

Il cogroup L'operatore raggruppa le tuple di ciascuna relazione in base all'età in cui ogni gruppo rappresenta un valore di età particolare.

Ad esempio, se consideriamo la prima tupla del risultato, viene raggruppata per 21 anni. E contiene due sacchetti:

  • la prima borsa contiene tutte le tuple della prima relazione (student_details in questo caso) avere 21 anni e

  • la seconda borsa contiene tutte le tuple della seconda relazione (employee_details in questo caso) avere 21 anni.

Nel caso in cui una relazione non abbia tuple con valore di età 21, restituisce un sacchetto vuoto.