hadoop - 在 Pig 中过滤记录

标签 hadoop apache-pig

下面是数据

col1,col2,col3,col4,col5
------------------------
10,20,30,40,dollar
20,30,40,50,dollar
20,30,10,50,dollar
61,62,63,64,dollar
61,62,63,64,pound

col1,col2,col3 将形成唯一键的组合。用例是根据 col5 过滤数据。 对于唯一的组合键,我们需要过滤col5值为“dollar”的记录,只有相同的组合具有“pound”值。

预期的输出是

col1,col2,col3,col4,col5
------------------------
10,20,30,40,dollar
20,30,40,50,dollar
20,30,10,50,dollar
61,62,63,64,pound

由于 Pig 中没有像 Hive 那样的特殊运算符,因此如何进一步进行。

A = load 'test1.csv' using PigStorage(',') as (col1:int,col2:int,col3:int,col4:int,col5:chararray);
B = FILTER A BY col5 == 'pound';

最佳答案

获取所有带'pound'的记录,然后获取所有带'dollar'且与col5中带'pound'的id组合不匹配的记录。最后,把他们嫁出去……联合。

B = FILTER A BY col5 == 'pound';
C = JOIN A BY (col1,col2,col3) LEFT OUTER,B BY (col1,col2,col3);
D = FILTER C BY (B::col1 is null);
E = FOREACH D GENERATE A::col1,A::col2,A::col3,A::col4,A::col5;
F = UNION B,E;
DUMP F;

输出

enter image description here

关于hadoop - 在 Pig 中过滤记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597526/

相关文章:

hadoop - 如何使用 pig 以 RC 格式存储分区数据?

java - 在Hive中开发UDTF时获取ClassCastException

hadoop - 列值超过一行的数据导入到HIVE表

eclipse - 如何为 Eclipse 安装 Pig 插件

hadoop - 如何使用水槽从大型机文件中提取数据到hadoop HDFS

Hadoop Pig 关联使用

hadoop - 从Pig生成的CurrentTime()在Hive Datetime列中显示为NULL

hadoop - 如何在Hadoop单节点服务器中写入和读取非结构化数据(例如,图像和视频)?

hadoop - 使用Pig从CSV文件读取数据

java - Pigunit给出错误类别未找到