计算 Pig 中的行值
Count line values in Pig
在这样的数据文件中:
1000054,4946631
1000065,4748968
1000067,4944640_5071294_5312208
1000086,4178246_4217220_4686189_4839046
是否可以计算逗号右侧的值并生成如下内容:
1000054, 1
1000065, 1
1000067, 3
1000086, 4
是的,在 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 [=11=],COUNT(TOBAG(..));
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)
在这样的数据文件中:
1000054,4946631
1000065,4748968
1000067,4944640_5071294_5312208
1000086,4178246_4217220_4686189_4839046
是否可以计算逗号右侧的值并生成如下内容:
1000054, 1
1000065, 1
1000067, 3
1000086, 4
是的,在 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 [=11=],COUNT(TOBAG(..));
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)