我是Pig的新手,我正在尝试在群组内执行RANK操作。我的数据看起来像
Name address Date A addr1 20150101 A addr2 20150130 B addr1 20140325 B addr2 20140821 B addr3 20150102
我希望我的输出像这样
Name address Date Rank A addr1 20150101 1 A addr2 20150130 2 B addr1 20140325 1 B addr2 20140821 2 B addr3 20150102 3
我正在使用Pig-0.12.1。有没有办法以猪内置函数获得所需格式的输出?
答案 0 :(得分:1)
使用标准猪来解决这个问题有点困难,但在datafu library
的帮助下,您可以轻松解决这个问题。
从此链接下载jar文件(datafu-1.2.0.jar
)
http://mvnrepository.com/artifact/com.linkedin.datafu/datafu/1.2.0,将其设置在类路径中并尝试以下方法
<强>输入强>
A addr1 20150101
A addr2 20150130
B addr1 20140325
B addr2 20140821
B addr3 20150102
<强> PigScript:强>
REGISTER /tmp/datafu-1.2.0.jar;
define Enumerate datafu.pig.bags.Enumerate('1');
A = LOAD 'input' USING PigStorage() AS (Name:chararray,Address:chararray,Date:chararray);
B = GROUP A BY Name;
C = FOREACH B GENERATE FLATTEN(Enumerate($1));
DUMP C;
<强>输出:强>
(A,addr1,20150101,1)
(A,addr2,20150130,2)
(B,addr1,20140325,1)
(B,addr2,20140821,2)
(B,addr3,20150102,3)