我有像
这样的数据(1,a,null)
(4,b,null)
(7,c,null)
(1,a,3)
(4,b,6)
(7,c,9)
我希望每个列都有不同的值及其计数,例如
(1,2)
(4,2)
(7,2)
(a,2)
(b,2)
(c,2)
(null,3)
(3,1)
(6,1)
(9,1)
如果前3个记录是不同的值并且它的计数在第一个,则接下来的3个记录是不同的值,它在第二个记录中的计数和最后4个记录是不同的值,它在最后一列中计数。
为此,我尝试按列分组值,如
x = load 'path/to/file' using PigStorage(',') AS (col1:int,col2:chararray,col3:chararray);
B1 = GROUP x by col1;
B2 = GROUP x by col2;
B3 = GROUP x by col3;
C1 = FOREACH B1 GENERATE $0 as col1:chararray,COUNT(x);
C2 = FOREACH B2 GENERATE $0 as col2:chararray,COUNT(x);
C3 = FOREACH B3 GENERATE $0 as col3:chararray,COUNT(x);
这是分开的数据:
C1结果是:
(1,{(1,a,null),(1,a,null)})
(4,{(4,b,null),(4,b,6)})
(7,{(7,c,null),(7,c,9)})
C2结果是:
(a,{(1,a,null),(1,a,3)})
(b,{(4,b,null),(4,b,6)})
(c,{(7,c,null),(7,c,9)})
C3结果是:
(null,{(1,a,null),(4,b,null),(7,c,null)})
(3,{(1,a,3)})
(6,{(4,b,6)})
(7,{(7,c,9)})
但我希望将所有数据集数据放在单个数据集中,如下所示,而不使用uninon关键字
(1,{(1,a,null),(1,a,null)})
(4,{(4,b,null),(4,b,6)})
(7,{(7,c,null),(7,c,9)})
(a,{(1,a,null),(1,a,3)})
(b,{(4,b,null),(4,b,6)})
(c,{(7,c,null),(7,c,9)})
(null,{(1,a,null),(4,b,null),(7,c,null)})
(3,{(1,a,3)})
(6,{(4,b,6)})
(7,{(7,c,9)})
提前致谢