Apache Pig - Cogroup Operatörü

COGROUPoperatörü aşağı yukarı GROUP operatörü ile aynı şekilde çalışır . İki operatör arasındaki tek fark,group işleci normalde bir ilişkiyle kullanılırken cogroup operatörü, iki veya daha fazla ilişkiyi içeren ifadelerde kullanılır.

Cogroup Kullanarak İki İlişkiyi Gruplama

İki dosyamız olduğunu varsayalım: student_details.txt ve employee_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyaları ilişki isimleriyle Pig'e yükledik. student_details ve employee_details aşağıda gösterildiği gibi sırasıyla.

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

Şimdi, ilişkilerin kayıtlarını / kayıtlarını gruplayalım student_details ve employee_details aşağıda gösterildiği gibi anahtar yaş ile.

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

Doğrulama

İlişkiyi doğrulayın cogroup_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump cogroup_data;

Çıktı

İsimli ilişkinin içeriğini görüntüleyerek aşağıdaki çıktıyı üretecektir. cogroup_data Aşağıda gösterildiği gibi.

(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 operatör, her bir ilişkiden tuple'ları her grubun belirli bir yaş değerini tasvir ettiği yaşa göre gruplandırır.

Örneğin, sonucun 1. grubunu ele alırsak, 21 yaşına göre gruplandırılır ve iki torba içerir -

  • ilk torba, ilk ilişkideki tüm kayıtları tutar (student_details bu durumda) 21 yaşında olmak ve

  • ikinci torba, ikinci ilişkiden (employee_details bu durumda) 21 yaşında olmak.

Bir ilişkinin 21 yaş değerine sahip demetleri olmaması durumunda boş bir torba döndürür.