在这样的数据文件中:
1000054,4946631
1000065,4748968
1000067,4944640_5071294_5312208
1000086,4178246_4217220_4686189_4839046
是否可以计算逗号右侧的值并生成如下内容:
1000054, 1
1000065, 1
1000067, 3
1000086, 4
答案 0 :(得分:0)
是的可能,在Option1
中你需要使用STRSPLIT
函数将第二部分拆分为'_'
作为分隔符并转换为包然后使用COUNT
函数来获取最终价值。
Option2
非常简单,仅TOKENIZE
第二部分以'_'
作为分隔符并获取计数。
<强>输入强>
1000054,4946631
1000065,4748968
1000067,4944640_5071294_5312208
1000086,4178246_4217220_4686189_4839046
<强> PigScript1:强>
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:强>
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)