猪群 - 群体的RANK操作

时间:2015-01-30 16:08:32

标签: apache-pig

我是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。有没有办法以猪内置函数获得所需格式的输出?

1 个答案:

答案 0 :(得分:1)

使用标准猪来解决这个问题有点困难,但在datafu library的帮助下,您可以轻松解决这个问题。

从此链接下载jar文件(datafu-1.2.0.jarhttp://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)