Apache pig 使用PigLatin删除重复项

Apache pig 使用PigLatin删除重复项,apache-pig,Apache Pig,我在用PigLatin过滤一些记录 User1 8 NYC User1 9 NYC User1 7 LA User2 4 NYC User2 3 DC 脚本应该为用户删除副本,并保留其中一条记录。类似于linux中的unique命令 输出应为: User1 8 NYC User2 4 NYC 有什么建议吗?Pig提供不同的命令来选择唯一的数据。如果要在字段上使用distinct,请在foreach嵌套块中使用distinct。对于您的特定示例,distinct将无法正常工

我在用PigLatin过滤一些记录

User1  8 NYC 
User1  9 NYC 
User1  7 LA 
User2  4 NYC
User2  3 DC 
脚本应该为用户删除副本,并保留其中一条记录。类似于linux中的unique命令

输出应为:

User1 8 NYC 
User2 4 NYC

有什么建议吗?

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

对于您的特定示例,distinct将无法正常工作,因为您的输出包含所有输入列
($0,$1,$2)
,您只能在具有列
($0,$2)
($0)
,并且丢失
$1
的投影上执行distinct

要为每个用户选择一条记录(任何记录),您可以使用
分组依据
和嵌套的
FOREACH
限制
。例:

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

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

谢谢,这正是我要寻找的。使用Distinct时要小心。Distinct关键字的缺点是:无法确保只删除第一条记录。