apache-pig - 如何在 Pig 中删除带有约束的重复项?

标签 apache-pig

我对 Pig 完全陌生,并且遇到了一些麻烦。

我有一个数据列表,我想删除重复项。然而,问题是重复项是通过具有相同的用户名和相同阈值内的访问时间来定义的。例如:

答:[用户1,10]

B:[用户1,20]

C:[用户1,11]

D:[用户2,10]

如果阈值为2,则A和C应被识别为重复项。我如何在 Pig 中做到这一点?目前看来我应该使用 UDF 和 DISTINCT 的某种组合,但我不确定如何告诉 DISTINCT 我想要将“重复”定义为。

谢谢!

最佳答案

a=load 'data' as (user, access_time:int) using ...;
b=foreach a generate user as user, (access_time > $threshold ? $threshold : access_time) as access_time;
c=group b by user;
d=foreach c generate group as user, FLATTEN(DISTINCT(b.access_time)) as access_time;
store d;

我没有测试该脚本,但想法是按用户分组,将高于阈值的所有内容替换为阈值,然后使用内置的不同 UDF。

关于apache-pig - 如何在 Pig 中删除带有约束的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423484/

相关文章:

apache-pig - PIG 中的多级 JSON

hadoop - PIG 替换多列

hadoop - pig 独特原子

hadoop - MapReduce 现实生活中的用途

hadoop - 将多个变量存储到单个文件中

hadoop - 关于 LoadFunc 的示例和更多解释

hadoop - 相当于 Apache Pig 中的 linux 'diff'

hadoop - 无法在伪分布式模式下运行 Pig Script

hadoop - PigLatin-本地模式-错误1066:无法打开别名B的迭代器

hadoop - pig + hbase + hadoop2 集成