【发布时间】:2013-08-13 15:56:11
【问题描述】:
我有以下数据集,如果它们具有相同的键,我需要将它们合并为一个。同时,我需要在分组的多个元组中进行选择。
1 N1 1 10
1 N1 2 15
2 N1 1 10
3 N1 1 10
3 N1 2 15
4 N2 1 10
5 N3 1 10
5 N3 2 20
例如
A = LOAD 'data.txt' AS (f1:int, f2:chararray, f3:int, f4:int);
G = GROUP A BY (f1, f2);
DUMP G;
((1,N1),{(1,N1,1,10),(1,N1,2,15)})
((2,N1),{(2,N1,1,10)})
((3,N1),{(3,N1,1,10),(3,N1,2,15)})
((4,N2),{(4,N2,1,10)})
((5,N3),{(5,N3,1,10),(5,N3,2,20)})
现在,我想选择收集袋中是否有多个元组,我只想过滤那些具有 f3==2 的元组。这是我想要的最终数据:
((1,N1),{(1,N1,2,15)}) -- f3==2, f3==1 is removed from this set
((2,N1),{(2,N1,1,10)})
((3,N1),{(3,N1,2,15)}) -- f3==2, f3==1 is removed from this bag
((4,N2),{(4,N2,1,10)})
((5,N3),{(5,N3,2,10)})
知道如何实现吗?
【问题讨论】:
-
我的方法是计算分组包的计数,然后过滤计数 > 1 的行和计数 ==1 的行。对于 count == 1 的集合,我直接将其展平,而对于第二个集合,我使用了嵌套过滤器。但是现在,pig 正在抱怨函数重载。我收到此错误 -
ERROR 1065: Found more than one load function to use: [PigStorage, org.apache.pig.builtin.PigStorage]
标签: hadoop apache-pig hadoop-streaming