我可以在 Pig 中保留不匹配的项目吗?

Posted

技术标签:

【中文标题】我可以在 Pig 中保留不匹配的项目吗?【英文标题】:Can I keep the not matched items from a join in Pig? 【发布时间】:2013-04-03 14:21:21 【问题描述】:

我有两套

personCounts 
(personName:chararray, count:int)

whitelist
(empID:int, empName:chararray)

我想要的是 personCounts 中但不在白名单中的人。我知道 JOIN 返回出现在两者中的元素。有没有办法返回那些将被丢弃的东西?我在想我可以用 CROSS 做到这一点,但我想我会有额外的东西..?

crossed = CROSS personCounts BY personName, whitelist BY empName;
filcrs = FILTER crossed BY NOT personCounts::personName MATCHES whitelist::empName;

【问题讨论】:

【参考方案1】:

我认为您想要实现的是 personCounts 和白名单之间的设置差异正确吗?

如果是这样,请尝试以下方法(未测试!!!):

CGRP = COGROUP personCounts BY personName, whitelist BY empName;
PC_MINUS_WL = FILTER CGRP BY IsEmpty(whitelist);
PC_MINUS_WL = FOREACH PC_MINUS_WL GENERATE group AS name;

我发现以下两个资源很有帮助:

http://agiletesting.blogspot.de/2012/02/set-operations-in-apache-pig.html

http://www.cs.tufts.edu/comp/150CPA/notes/Advanced_Pig.pdf

【讨论】:

【参考方案2】:

您可以使用 JOIN FULL 来做到这一点。

joined = JOIN personCounts BY personName FULL, whitetlist BY empName;
joined = FILTER joined BY NOT $0 MATCHES '';
joined = FILTER joined BY $3 IS null;

然后加入的是 (personName, count, , '')

【讨论】:

以上是关于我可以在 Pig 中保留不匹配的项目吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pig 脚本查找不匹配的记录

我可以从 ComboBox 中删除项目而不更改其他项目的索引吗?

RecyclerView 和 notifyDataSetChanged LongClick 不匹配

macbook 有没有粘贴时只保留文字或者匹配当前格式的快捷键啊? 可以自己设置吗?

猪过滤掉不匹配

如何在 Pig 中创建不区分大小写的匹配?