如果 PIG 中的第二个字段具有不同的值,如何过滤/删除记录

Posted

技术标签:

【中文标题】如果 PIG 中的第二个字段具有不同的值,如何过滤/删除记录【英文标题】:How to Filter/Remove record if 2nd field has different values in it in PIG 【发布时间】:2016-09-02 13:24:27 【问题描述】:

如果第二个字段中有不同的值,如何过滤/删除记录... 例如:

身份证、姓名

100 , ABC
100 , DEF
100 , XYZ
102 , ABC
102 , ABC
103 , ABC

输出:

102 , ABC
103 , ABC

注意:100 应该删除,因为它包含两个不同的 NAMES,并且 102 应该在输出中只取一次..

【问题讨论】:

ID 和 NAME 是数据中的两个字段。 【参考方案1】:

简单步骤:

A = load 'file' using PigStorage(',') as (ID:int,NAME:chararray);
B = DISTINCT A;
C = filter B by NAME =='ABC'; 
D = filter B by NAME !='ABC'; 
E = join C by ID left outer, D by ID;
F = filter E by (D::NAME is null); 
G = foreach F generate C::ID as ID,C::NAME as NAME;

希望这会有所帮助..

【讨论】:

以上是关于如果 PIG 中的第二个字段具有不同的值,如何过滤/删除记录的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch中不同字段中的两个过滤器(RANGE)

加入多个字段,只过滤真正不同的行

访问数据视图中的第二个表

如何在 EF / EF Core 中的第二个表上实现具有某些条件的左连接?

与第二个字段相交的 SQL 中的返回字段?

使用 Java Stream 根据第二个列表中的值过滤列表