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)
我是 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)