Учебники

Apache Pig — оператор Cogroup

Оператор COGROUP работает более или менее так же, как оператор GROUP . Единственное различие между этими двумя операторами состоит в том, что оператор группы обычно используется с одним отношением, тогда как оператор cogroup используется в операторах, включающих два или более отношений.

Группировка двух отношений с использованием Cogroup

Предположим, что у нас есть два файла, а именно student_details.txt и employee_details.txt в каталоге HDFS / pig_data /, как показано ниже.

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

И мы загрузили эти файлы в Pig с именами отношений student_details и employee_details соответственно, как показано ниже.

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

Теперь давайте сгруппируем записи / кортежи отношений student_details и employee_details с ключевым возрастом, как показано ниже.

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

верификация

Проверьте отношение cogroup_data, используя оператор DUMP, как показано ниже.

grunt> Dump cogroup_data;

Выход

Он выдаст следующий вывод, отображающий содержимое отношения с именем cogroup_data, как показано ниже.

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

Оператор cogroup группирует кортежи из каждого отношения в соответствии с возрастом, где каждая группа отображает определенное значение возраста.

Например, если мы рассмотрим 1-й кортеж результата, он сгруппирован по возрасту 21. И он содержит две сумки —

  • первая сумка содержит все кортежи из первого отношения (в данном случае student_details ), имеющие возраст 21, и

  • второй пакет содержит все кортежи из второго отношения (в данном случае employee_details ), которым исполнился 21 год.

первая сумка содержит все кортежи из первого отношения (в данном случае student_details ), имеющие возраст 21, и

второй пакет содержит все кортежи из второго отношения (в данном случае employee_details ), которым исполнился 21 год.

Если отношение не имеет кортежей со значением возраста 21, оно возвращает пустой пакет.