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.txt và employee_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_details và employee_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_details và employee_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.