2

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

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

A: [用户 1, 10]

B: [用户 1, 20]

C: [用户 1, 11]

D: [用户 2, 10]

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

谢谢!

4

1 回答 1

2
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。

于 2012-05-04T14:22:47.017 回答