【问题标题】:PIG: Process tuples in a bagPIG:处理包中的元组
【发布时间】:2016-02-24 17:23:32
【问题描述】:

我有一个在 GROUP 操作后看起来像这样的数据集:

input = key1|{(a1,b1,c1),(a2,b2,c2)}
        key2|{(a3,b3,c3),(a4,b4,c4),(a5,b5,c5)}

我需要遍历上面的来生成像这样的最终输出:

<KEY>key1</KEY>|
<VALUES><VALUE><VALUE1>a1</VALUE1>VALUE2>b1</VALUE2>VALUE3>c1</VALUE3></VALUE><VALUE><VALUE1>a2</VALUE1><VALUE2>b2</VALUE2><VALUE3>c2</VALUE3>    </VALUE></VALUES>
 <KEY>key2</KEY>| ...

我曾尝试使用 FLATTEN 和 CONCAT 以下列方式实现此结果:

A = FOREACH input GENERATE key, FLATTEN(input);
output = FOREACH A GENERATE CONCAT('<KEY>',CONCAT(input.key,'</KEY>')),
                            CONCAT('<VALUE>',''),
                            CONCAT('<VALUE1>',CONCAT(input.col1,'</VALUE1>')
                            ...

但这并没有提供所需的输出。对猪很陌生,所以不知道这是否可能。

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    如果你压平你的包,你最终会得到和包里一样多的新“行”:

    key1|(a1,b1,c1)
    key1|(a2,b2,c2)
    

    如果我正确理解你的问题,你想要这个:

    使用BagToTuple 内置函数。

    你会得到的

    key1|(a1,b1,c1,a2,b2,c2)
    

    在此之后,您可以使用例如格式化您的数据。一个UDF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多