Apache Pig - Người điều hành nhóm
Các GROUPtoán tử được sử dụng để nhóm dữ liệu trong một hoặc nhiều quan hệ. Nó thu thập dữ liệu có cùng một khóa.
Cú pháp
Dưới đây là cú pháp của group nhà điều hành.
grunt> Group_data = GROUP Relation_name BY age;
Thí dụ
Giả sử rằng chúng tôi có một tệp có tên student_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
Và chúng tôi đã tải tệp này vào Apache Pig với tên quan hệ student_details như hình bên dưới.
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);
Bây giờ, chúng ta hãy nhóm các bản ghi / bộ dữ liệu theo mối quan hệ theo độ tuổi như được hiển thị bên dưới.
grunt> group_data = GROUP student_details by age;
xác minh
Xác minh mối quan hệ group_data sử dụng DUMP như hình dưới đây.
grunt> Dump group_data;
Đầu ra
Sau đó, bạn sẽ nhận được đầu ra hiển thị nội dung của quan hệ có tên group_datanhư hình bên dưới. Ở đây bạn có thể thấy rằng lược đồ kết quả có hai cột:
Một là age, theo đó chúng tôi đã nhóm mối quan hệ.
Kia là một bag, trong đó chứa nhóm bộ giá trị, hồ sơ học sinh với độ tuổi tương ứng.
(21,{(4,Preethi,Agarwal,21,9848022330,Pune),(1,Rajiv,Reddy,21,9848022337,Hydera bad)})
(22,{(3,Rajesh,Khanna,22,9848022339,Delhi),(2,siddarth,Battacharya,22,984802233 8,Kolkata)})
(23,{(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336 ,Bhuwaneshwar)})
(24,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334, trivendram)})
Bạn có thể thấy lược đồ của bảng sau khi nhóm dữ liệu bằng cách sử dụng describe lệnh như hình dưới đây.
grunt> Describe group_data;
group_data: {group: int,student_details: {(id: int,firstname: chararray,
lastname: chararray,age: int,phone: chararray,city: chararray)}}
Theo cách tương tự, bạn có thể lấy minh họa mẫu của lược đồ bằng cách sử dụng illustrate lệnh như hình dưới đây.
$ Illustrate group_data;
Nó sẽ tạo ra kết quả sau:
-------------------------------------------------------------------------------------------------
|group_data| group:int | student_details:bag{:tuple(id:int,firstname:chararray,lastname:chararray,age:int,phone:chararray,city:chararray)}|
-------------------------------------------------------------------------------------------------
| | 21 | { 4, Preethi, Agarwal, 21, 9848022330, Pune), (1, Rajiv, Reddy, 21, 9848022337, Hyderabad)}|
| | 2 | {(2,siddarth,Battacharya,22,9848022338,Kolkata),(003,Rajesh,Khanna,22,9848022339,Delhi)}|
-------------------------------------------------------------------------------------------------
Nhóm theo nhiều cột
Hãy để chúng tôi nhóm mối quan hệ theo độ tuổi và thành phố như hình dưới đây.
grunt> group_multiple = GROUP student_details by (age, city);
Bạn có thể xác minh nội dung của mối quan hệ có tên group_multiple sử dụng toán tử Dump như được hiển thị bên dưới.
grunt> Dump group_multiple;
((21,Pune),{(4,Preethi,Agarwal,21,9848022330,Pune)})
((21,Hyderabad),{(1,Rajiv,Reddy,21,9848022337,Hyderabad)})
((22,Delhi),{(3,Rajesh,Khanna,22,9848022339,Delhi)})
((22,Kolkata),{(2,siddarth,Battacharya,22,9848022338,Kolkata)})
((23,Chennai),{(6,Archana,Mishra,23,9848022335,Chennai)})
((23,Bhuwaneshwar),{(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)})
((24,Chennai),{(8,Bharathi,Nambiayar,24,9848022333,Chennai)})
(24,trivendram),{(7,Komal,Nayak,24,9848022334,trivendram)})
Nhóm tất cả
Bạn có thể nhóm một mối quan hệ theo tất cả các cột như hình dưới đây.
grunt> group_all = GROUP student_details All;
Bây giờ, hãy xác minh nội dung của mối quan hệ group_all như hình bên dưới.
grunt> Dump group_all;
(all,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334 ,trivendram),
(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336,Bhuw aneshwar),
(4,Preethi,Agarwal,21,9848022330,Pune),(3,Rajesh,Khanna,22,9848022339,Delhi),
(2,siddarth,Battacharya,22,9848022338,Kolkata),(1,Rajiv,Reddy,21,9848022337,Hyd erabad)})