使用PigLatin删除重复项

aal*_*sum 9 apache-pig

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

User1  8 NYC 
User1  9 NYC 
User1  7 LA 
User2  4 NYC
User2  3 DC 
Run Code Online (Sandbox Code Playgroud)

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

输出应该是:

User1 8 NYC 
User2 4 NYC
Run Code Online (Sandbox Code Playgroud)

有什么建议?

ale*_*pab 20

对于您的特定示例,distinct将无法正常工作,因为您的输出包含所有输入列($0, $1, $2),您可以仅对具有列($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);
};
Run Code Online (Sandbox Code Playgroud)

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