计算Pig中的行值

时间:2015-03-28 01:21:43

标签: mapreduce apache-pig

在这样的数据文件中:

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

是否可以计算逗号右侧的值并生成如下内容:

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

1 个答案:

答案 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)