提高pig脚本的效率

uqxowvwt  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(324)

数据集:

我有一个(id,category)格式的数据集(data.txt),如下所示:

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

目标:

我们的目标是找出哪一类在不使用自定义项的情况下拥有最多的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新手,我不确定是否有任何内置函数可以执行这些任务,从表中输出最小值或最大值的相应值。
我的要求是知道这是否可以在任何较少的步骤实现。
非常感谢

w51jfk4q

w51jfk4q1#

分组后,按计数降序对分组进行排序,得到最上面的记录。

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;

相关问题