pig-rank对组的操作

2ul0zpep  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(261)

我是新来的Pig,我试图在组内执行排名操作

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。有没有什么方法可以通过pig内置函数获得所需格式的输出??

clj7thdc

clj7thdc1#

用标准清管器解决这个问题有点困难,但要借助于 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

Pig手稿:

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)

相关问题