【问题标题】:Count line values in PigPig中的计数线值
【发布时间】:2015-03-28 01:21:42
【问题描述】:

在这样的数据文件中:

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

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

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

【问题讨论】:

    标签: mapreduce apache-pig


    【解决方案1】:

    是的,在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)
    

    【讨论】:

    • 更新了一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多