将数据列端分组到pig中的单个数据集

bkhjykvo  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(422)

我有这样的数据

(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)})

提前谢谢

wf82jlnq

wf82jlnq1#

以行的形式读取数据并进行字数计算。
脚本

raw_data= LOAD 'test3.txt' AS (line:chararray);
words = FOREACH raw_data GENERATE FLATTEN(TOKENIZE(line)) as word;
grouped = GROUP words BY word;
wordcount = FOREACH grouped GENERATE group, COUNT(words);
DUMP wordcount;

输出

相关问题