我有这样的数据
(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)})
结果是:
(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)})
提前谢谢
1条答案
按热度按时间wf82jlnq1#
以行的形式读取数据并进行字数计算。
脚本
输出