【问题标题】:PIG get the minimum rank within a groupPIG 获得组内的最低排名
【发布时间】:2014-04-02 19:51:26
【问题描述】:

我是 PIG 的新手,我试图弄清楚如何在组内获得最低排名。 我想要的是从以下数据集中获得:

ID clickcounter
A   A1
A   A2
A   A3
B   B1
B   B2
C   C1
D   D1
E   E1
E   E2
E   E3
E   E4

...到以下数据集:

ID  clickcounter   Rank     minRank_of_ID
A    A1             1       1
A    A2             2       1   
A    A3             3       1
B    B1             4       4
B    B2             5       4
C    C1             6       6
D    D1             7       7
E    E1             8       8
E    E2             9       8
E    E3             10      8
E    E4             11      8

我尝试了以下代码并且它正在运行,但是我想知道是否有更好的解决方案?

A = LOAD 'datapath' using PigStorage() as (ID:chararray, clickcount:chararray);
B = rank A;
C = group B by ID;
D = foreach C generate  group, flatten($1.clickcount), MIN($1.rank_A);
E = rank D;
Dump D;

【问题讨论】:

    标签: apache-pig ranking rank


    【解决方案1】:

    你在正确的轨道上。在您的代码中,直到D 的所有内容都是正确的。只需进行几处更改,您将获得预期的输出:

    D = FOREACH C GENERATE group, FLATTEN(B.($0, clickcount)), MIN(B.$0) ;
    -- D should not be your expected output!
    

    由于C 的输出是这样的:

    (A, {(1, A, A1), (2, A, A2), (3, A, A3)})
    (B, {(4, B, B1), (5, B, B2)})
    etc.
    

    您的FLATTEN 将需要Bclickcount 字段中给出的排名。 E 中的 RANK 不会按照您的预期进行,因为不再保证数据与文件中的顺序相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2012-04-08
      • 2023-03-14
      • 2021-12-23
      • 2019-06-12
      • 1970-01-01
      相关资源
      最近更新 更多