我正在使用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)
有没有办法进行这种转变?
感谢您的帮助!
答案 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而尚未使用它,您可能应该看看它。