pig在一个组中获得最低等级

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

我是新来的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;
kd3sttzy

kd3sttzy1#

你在正确的轨道上。在你的代码里 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 需要两个等级 B 以及 clickcount 现场。这个 RANKE 不会像您期望的那样执行,因为不再保证数据与文件中的顺序相同。

相关问题