apache-pig - Apache Pig rank函数的使用

标签 apache-pig

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

是否可以直接使用 rank 函数?
任何提示将不胜感激。

数据:

id,rating
X001, 9
X001, 9
X001, 8
X002, 9
X002, 7
X002, 6
X002, 5
X003, 8
X004, 8
X004, 7
X004, 7
X004, 4

在使用秩函数时,如:
op = 按 id、score 对数据进行排名;

我得到这个输出
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

最佳答案

您可以按 id 对数据进行分组,然后使用 UDF Enumerate (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;

DataFu jar 文件可以从 Maven 中央存储库下载:http://search.maven.org/#search|ga|1|g%3A%22com.linkedin.datafu%22

关于apache-pig - Apache Pig rank函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987036/

相关文章:

hadoop - 如何与 Pig 中的其他字段一起计数?

hadoop - 如何在Apache Pig中使用ToDate函数处理NULL值

Hadoop、Hive、Pig、HBase、Cassandra——什么时候用什么?

hadoop - 在 pig 中有条件地分组记录

hadoop - 以 yyyy-MM-dd 为单位的 pig 通过日期

hadoop - 检查袋子是否为空或是否在 pig 内foreach

hadoop - TOKENIZE关键字查询Pig

azure - 将日期转换为周日名称和一天的一部分

hadoop - 我可以将 pig.temp.dir 设置为/user/USERNAME/tmp/pig 吗?

hadoop - 在另一个关系上使用 FOREACH 时将关系传递给 PIG UDF?