使用PigLatin删除重复项

时间:2012-07-18 03:50:59

标签: apache-pig

我正在使用PigLatin来过滤一些记录。

User1  8 NYC 
User1  9 NYC 
User1  7 LA 
User2  4 NYC
User2  3 DC 

脚本应删除用户的副本,并保留其中一个记录。像linux中的唯一命令一样。

输出应为:

User1 8 NYC 
User2 4 NYC

有什么建议吗?

2 个答案:

答案 0 :(得分:20)

对于您的特定示例,由于您的输出包含所有输入列($0, $1, $2),因此distinct不会正常工作,您只能在具有列($0, $2)($0)的投影上执行此操作。失去$1

为了为每个用户(任何记录)选择一条记录,您可以使用GROUP BY和嵌套FOREACH LIMIT。例如:

inpt = load '......' ......;
user_grp = GROUP inpt BY $0;
filtered = FOREACH user_grp {
      top_rec = LIMIT inpt 1;
      GENERATE FLATTEN(top_rec);
};

此方法将帮助您获取字段子集上唯一的记录,并限制每个用户可以控制的输出记录数。

答案 1 :(得分:0)

Pig提供DISTINCT命令来选择唯一数据。如果要在字段中使用distinct,请在foreach嵌套块中使用Distinct。