Apache pig 使用PigLatin删除重复项
我在用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将无法正常工
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关键字的缺点是:无法确保只删除第一条记录。