我正在使用PigLatin来过滤一些记录。
User1 8 NYC
User1 9 NYC
User1 7 LA
User2 4 NYC
User2 3 DC
脚本应删除用户的副本,并保留其中一个记录。像linux中的唯一命令一样。
输出应为:
User1 8 NYC
User2 4 NYC
有什么建议吗?
答案 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。