PIG:在一个包里处理元组

时间:2016-02-24 17:23:33

标签: hadoop apache-pig

我有一个在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>')
                            ...

但这并不能提供所需的输出。对猪来说相当新,所以不知道这是否可能。

1 个答案:

答案 0 :(得分:0)

如果你把你的包放在手上,你的包包里会有许多新的“行”:

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

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

使用BagToTuple内置功能。<​​/ p>

比你得到

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

在此之后,您可以使用以下方式设置数据格式:一个UDF