我是新来的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;
1条答案
按热度按时间kd3sttzy1#
你在正确的轨道上。在你的代码里
D
是正确的。您只需做几个更改即可获得预期的输出:自从
C
就像:你的
FLATTEN
需要两个等级B
以及clickcount
现场。这个RANK
在E
不会像您期望的那样执行,因为不再保证数据与文件中的顺序相同。