我有一个在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>')
...
但这并不能提供所需的输出。对猪来说相当新,所以不知道这是否可能。
答案 0 :(得分:0)
如果你把你的包放在手上,你的包包里会有许多新的“行”:
key1|(a1,b1,c1)
key1|(a2,b2,c2)
如果我理解你的问题你想要这个:
使用BagToTuple内置功能。</ p>
比你得到
key1|(a1,b1,c1,a2,b2,c2)
在此之后,您可以使用以下方式设置数据格式:一个UDF