2016-08-27 58 views
0

数据集:
我在(ID,类别)格式的数据集(data.txt中)如下面给出:
提高的效率PIG脚本

01,X 
    02,Y 
    03,X 
    04,Y 
    05,X 
    06,X 
    07,Z 
    08,Z 
    09,X 
    10,Z 



目的:
目标是找出哪个类别具有最大数量的ID而不使用UDF。

一种方法:
我已经试过多次,并得出结论认为,这可以通过设置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; 

请求的followins被achived:
尽管这些声明得到期望的结果,我不相信它的效率。 由于我是PIG的新手,我不确定是否有任何内置函数可以执行此类任务,以便从表格中输出最小值或最大值的相应值。

我的要求是要知道这是否可以用更少的步骤数完成。

非常感谢

回答

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; 
+0

该脚本将工作F9如果数据集只有一个最高值,如果您有多个最大值不会产生正确的结果.. –