数据集:
我有一个(ID,Category)格式的数据集(data.txt),如下所示:
01,X
02,Y
03,X
04,Y
05,X
06,X
07,Z
08,Z
09,X
10,Z
目的:
目标是在不使用UDF的情况下找出具有最大ID数的类别。
一种方法:
我已多次尝试并得出结论,这可以通过以下PIG语句集来实现
A1 = LOAD 'data.txt' USING PigStorage(',') AS (ID:int , Category:chararray);
A2 = DISTINCT A1;
A3 = GROUP A2 BY Category;
A4 = FOREACH A3 GENERATE group AS Category, COUNT(A2.ID) AS Number;
A5 = GROUP A4 ALL;
A6 = FOREACH A5 GENERATE MAX(A4.Number);
A7 = FILTER A4 by Number == A6.$0;
A8 = FOREACH A7 GENERATE Category;
DUMP A8;
请求:
虽然这些陈述给出了理想的结果,但我并不相信它的效率。
由于我是PIG的新手,我不确定是否有任何内置函数可以执行此类任务以从表中输出相应的最小值或最大值。
我的要求是知道这是否可以在任何更少的步骤中实现。
非常感谢
答案 0 :(得分:1)
分组后按降序对分组进行排序并获得最高记录。
A1 = LOAD 'data.txt' USING PigStorage(',') AS (ID:int , Category:chararray);
A2 = DISTINCT A1;
A3 = GROUP A2 BY Category;
A4 = FOREACH A3 GENERATE group AS Category, COUNT(A2.ID) AS Number;
A5 = ORDER A4 BY Number DESC;
A6 = LIMIT A5 1;
DUMP A6.$0;