【问题标题】:merge tuple in Pig在 Pig 中合并元组
【发布时间】:2015-09-05 03:20:00
【问题描述】:

我有两组元组,我想通过第一个元素将它们内部连接起来,并将其他部分合并到一个元组中,想知道如何在 Pig on Hadoop 中实现这一点?

输入两个元组集,

1,(1,2)
2,(2,3)

1,(b,c,b,c)
2,(c,d,c,d)

预期输出,

1,(1,2,b,c,b,c)
2,(2,3,c,d,c,d)

提前致谢, 林

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    一个值得思考的想法......

    输入:

    数据A:

    1   (1,2)
    2   (2,3)
    

    数据B:

    1   (b,c,b,c)
    2   (c,d,c,d)
    

    猪脚本:

    A = LOAD 'dataA'  USING  PigStorage('\t') AS  (aid:long, atuple : tuple(af1:long, af2:long));
    B = LOAD 'dataB'  USING  PigStorage('\t') AS  (bid:long, btuple : tuple(bf1:chararray, bf2:chararray, bf3:chararray, bf4:chararray));
    C = JOIN A BY aid, B BY bid;
    D = FOREACH C GENERATE aid AS id, FLATTEN(atuple) AS (af1:long, af2:long) , FLATTEN(btuple) AS (bf1:chararray, bf2:chararray, bf3:chararray, bf4:chararray);
    E = FOREACH D GENERATE id, (af1..bf4);
    DUMP E;
    

    输出:DUMP E:

    (1,(1,2,b,c,b,c))
    (2,(2,3,c,d,c,d))
    

    【讨论】:

    • 非常感谢,但是如果每行的第二个元组有不同数量的元素,你怎么处理?
    • @LinMa :如果我们知道一行中元素的最大数量,那么我们可以为所有元素声明别名,或者我们可以使用 $ 表示法访问元素。例如:如果元组 1 中的最大元素数为 2,元组 2 中的最大元素数为 100,则在导出样本集中别名 E 的元组时,使用 ($1..$103)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多