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.