提高 PIG Script 的效率
Improve efficiency of PIG Script
数据集:
我有一个(ID,类别)格式的数据集(data.txt),如下所示:
01,X
02,Y
03,X
04,Y
05,X
06,X
07,Z
08,Z
09,X
10,Z
Objective:
objective是在不使用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.[=11=];
A8 = FOREACH A7 GENERATE Category;
DUMP A8;
要求:
尽管这些陈述给出了预期的结果,但我对其效率并不满意。
由于我是 PIG 的新手,我不确定是否有任何内置函数可以执行此类任务以从 table 输出相应的最小值或最大值。
我的要求是知道这是否可以通过更少的步骤来实现。
非常感谢
分组后按计数降序对分组进行排序,取最上面的记录。
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.[=10=];
数据集:
我有一个(ID,类别)格式的数据集(data.txt),如下所示:
01,X
02,Y
03,X
04,Y
05,X
06,X
07,Z
08,Z
09,X
10,Z
Objective:
objective是在不使用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.[=11=];
A8 = FOREACH A7 GENERATE Category;
DUMP A8;
要求:
尽管这些陈述给出了预期的结果,但我对其效率并不满意。
由于我是 PIG 的新手,我不确定是否有任何内置函数可以执行此类任务以从 table 输出相应的最小值或最大值。
我的要求是知道这是否可以通过更少的步骤来实现。
非常感谢
分组后按计数降序对分组进行排序,取最上面的记录。
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.[=10=];