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.