我对 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/