Apache Pig - Nhà điều hành Cogroup

Các COGROUPtoán tử hoạt động nhiều hơn hoặc ít hơn theo cách giống như toán tử GROUP . Sự khác biệt duy nhất giữa hai toán tử làgroup toán tử thường được sử dụng với một quan hệ, trong khi cogroup toán tử được sử dụng trong các câu lệnh liên quan đến hai hoặc nhiều quan hệ.

Nhóm hai mối quan hệ bằng cách sử dụng Cogroup

Giả sử rằng chúng ta có hai tệp cụ thể là student_details.txtemployee_details.txt trong thư mục HDFS /pig_data/ như hình bên dưới.

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

Và chúng tôi đã tải các tệp này vào Pig với các tên quan hệ student_detailsemployee_details tương ứng, như hình dưới đây.

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

Bây giờ, chúng ta hãy nhóm các bản ghi / bộ giá trị của các mối quan hệ student_detailsemployee_details với độ tuổi quan trọng, như hình dưới đây.

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

xác minh

Xác minh mối quan hệ cogroup_data sử dụng DUMP như hình dưới đây.

grunt> Dump cogroup_data;

Đầu ra

Nó sẽ tạo ra kết quả sau, hiển thị nội dung của quan hệ có tên cogroup_data như hình bên dưới.

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

Các cogroup toán tử nhóm các bộ giá trị từ mỗi quan hệ theo độ tuổi trong đó mỗi nhóm mô tả một giá trị tuổi cụ thể.

Ví dụ: nếu chúng ta xem xét bộ đầu tiên của kết quả, nó được nhóm theo độ tuổi 21. Và nó chứa hai túi -

  • túi đầu tiên chứa tất cả các bộ giá trị từ quan hệ đầu tiên (student_details trong trường hợp này) có tuổi 21 và

  • túi thứ hai chứa tất cả các bộ giá trị từ quan hệ thứ hai (employee_details trong trường hợp này) có 21 tuổi.

Trong trường hợp một quan hệ không có các bộ giá trị tuổi 21, nó trả về một túi trống.