pig中的行值计数

brtdzjyr  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(261)

在这样的数据文件中:

1000054,4946631
1000065,4748968
1000067,4944640_5071294_5312208
1000086,4178246_4217220_4686189_4839046

是否可以计算逗号右侧的值并生成如下所示的soemthing:

1000054, 1
1000065, 1
1000067, 3
1000086, 4
jbose2ul

jbose2ul1#

是的,这是可能的 Option1 你需要使用 STRSPLIT 函数 '_' 作为分隔符并转换成包然后使用 COUNT 函数获取最终值。 Option2 很简单,只是 TOKENIZE 第二部分 '_' 作为分隔符并获取计数。
输入:

1000054,4946631
1000065,4748968
1000067,4944640_5071294_5312208
1000086,4178246_4217220_4686189_4839046

pigscript1:脚本1:

A = LOAD 'input' USING PigStorage(',') AS(f1:int,f2:chararray);;
B = FOREACH A GENERATE f1, FLATTEN(STRSPLIT(f2,'_'));
C = FOREACH B GENERATE $0,COUNT(TOBAG($1..));
DUMP C;

pigscript2:脚本2:

A = LOAD 'input' USING PigStorage(',') AS(f1:int,f2:chararray);;
B = FOREACH A GENERATE f1, COUNT(TOKENIZE(f2,'_'));
DUMP B;

输出:

(1000054,1)
(1000065,1)
(1000067,3)
(1000086,4)

相关问题