Pig - 分组的RANK操作

Pig - RANK Operation on Groups

我是 Pig 的新手,我正在尝试在 group.My 数据中执行 RANK 操作,看起来像


   姓名 地址 日期
    地址1 20150101
    地址2 20150130
    B地址1 20140325
    B地址2 20140821
    B地址3 20150102

我想要这样的输出


    姓名 地址 日期 排名
    地址1 20150101 1
    地址2 20150130 2
    B地址1 20140325 1
    B地址2 20140821 2
    B地址3 20150102 3

我正在使用 Pig-0.12。1.Is 有什么方法可以使用 pig 内置函数获得所需格式的输出??

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

从此link下载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());
DUMP C;

输出:

(A,addr1,20150101,1)
(A,addr2,20150130,2)
(B,addr1,20140325,1)
(B,addr2,20140821,2)
(B,addr3,20150102,3)