最近我尝试使用pig对一些数据进行排序,下面是按计数排序数据的脚本(例如,我希望找到前3个):
in = load 'data.txt';
split = foreach in generate flatten(TOKENIZE((chararray)$0)) as tmp;
C = group split by tmp;
result = foreach C generate group, COUNT(split) as cnt;
des = ORDER result BY cnt DESC;
fin = LIMIT des 3;
然后输出如下:
A,10
B,9
C,8
但是如果我们有另一个计数也是8的数据,它就不能被输出。具体来说,当我键入dump des时,内容如下:
A,10
B,9
C,8
D,8
E,8
F,7
.
.
如果我想输出前三名,它还需要在结果中包含d,8e,8,但是pig脚本语言中的limit不能做到这一点。有没有人有使用pig语言处理问题的经验,或者必须编写一个udf函数来处理这个问题?
1条答案
按热度按时间anauzrmj1#
Limit
在你的情况下不起作用,你必须使用RANK
以及FILTER
接线员。数据.txt
Pig手稿:
输出: