使用Apache Pig扩展数组

时间:2012-03-01 19:52:36

标签: apache-pig

我正在使用Apache pig分析数据,并且无法找到扩展数组的方法。 这是我正在使用的模式,以及所需输出的示例:

(col1:int, col2:int, items:{ARRAY_ELEM:(name:chararray, total:int)})
input  = (1, 1, {("bird", 5), ("bear", 12), ("wolf", 10)})
output = (1, 1, "bird", 5, "bear", 12, "wolf", 10)

有没有办法进行这种转变?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果您现在需要进行此转换,最简单的方法可能是在Python或Java中执行 UDF (我不知道任何内置解决方案)。

但是,大多数情况下,最好在每条记录中保留相同数量的列(例如,将数组保留为包或元组,不要在一个记录中“扁平”。)

答案 1 :(得分:1)

查看this Python UDF I wrote for doing that(希望很快成为Python PiggyBank的一部分)。你可以在你的行李上使用它,然后展平它们以获得你想要的结果,例如,假设你的数据集叫做blah,你应该能够注册我的函数,然后执行以下操作:

flattened_blah = FOREACH blah GENERATE item1, item2, FLATTEN(bagToTuple(item3)) AS item4, item5, item6, item7, item8, item9

另外,我很确定LinkedIn's DataFu有办法做到这一点。如果您正在使用Pig而尚未使用它,您可能应该看看它。