Apache pig apachepig-rank函数的使用

Apache pig apachepig-rank函数的使用,apache-pig,Apache Pig,我使用Pig 0.11.0秩函数,为我的数据中的每个id生成秩。 我需要以特定的方式对我的数据进行排名。我希望排名重置,并从1开始为每一个新的ID 是否可以直接使用秩函数进行相同的计算? 任何提示都将不胜感激 数据: 关于使用秩函数,如: op=按id、分数对数据进行排名 我得到这个输出 rank,id,rating 1, X001, 9 1, X001, 9 2, X001, 8 3, X002, 9 4, X002, 7 5, X002, 6 6, X002, 5 7, X003, 8 8,

我使用Pig 0.11.0秩函数,为我的数据中的每个id生成秩。 我需要以特定的方式对我的数据进行排名。我希望排名重置,并从1开始为每一个新的ID

是否可以直接使用秩函数进行相同的计算? 任何提示都将不胜感激

数据:

关于使用秩函数,如: op=按id、分数对数据进行排名

我得到这个输出

rank,id,rating
1, X001, 9
1, X001, 9
2, X001, 8
3, X002, 9
4, X002, 7
5, X002, 6
6, X002, 5
7, X003, 8
8, X004, 8
9, X004, 7
9, X004, 7
10, X004, 4
所需O/p:

rank,id,rating
1, X001, 9
1, X001, 9
2, X001, 8
1, X002, 9
2, X002, 7
3, X002, 6
4, X002, 5
1, X003, 8
1, X004, 8
2, X004, 7
2, X004, 7
3, X004, 4

您可以按如下方式使用秩函数: B=按等级描述排名A; 垃圾场B


注意:考虑到您的示例中提到的have(id,rating)。

您可以按id对数据进行分组,然后使用UDF(DataFu)将索引附加到行李的每个元组中

register datafu-1.1.0.jar;
define Enumerate datafu.pig.bags.Enumerate('1');

data = load 'data' using PigStorage(',') as (id:chararray, rating:int);
data = group data by id;
data = foreach data {
  sorted = order data by rating DESC;
  generate group, sorted;
}
data = foreach data generate FLATTEN(Enumerate(sorted));
data = foreach data generate $2, $0, $1;
dump data;
可以从Maven中央存储库下载DataFu jar文件:

register datafu-1.1.0.jar;
define Enumerate datafu.pig.bags.Enumerate('1');

data = load 'data' using PigStorage(',') as (id:chararray, rating:int);
data = group data by id;
data = foreach data {
  sorted = order data by rating DESC;
  generate group, sorted;
}
data = foreach data generate FLATTEN(Enumerate(sorted));
data = foreach data generate $2, $0, $1;
dump data;