2012-03-01 169 views
1

我正在用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

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

然而,大部分的时间,最好是保持相同数量列的每个记录(例如保持你的阵列袋或元组和一个记录不“扁平化”的话)。

1

退房this Python UDF I wrote for doing that(希望很快成为Python PiggyBank的一部分)。您可以使用在你的行李,然后压平他们得到想要的结果,例如,假设你的数据集称为胡说,你应该可以登记自己的函数,然后像做:

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

另外,我很确定LinkedIn's DataFu有一个这样做的方法。如果您正在使用Pig并且尚未使用它,那么您可能应该查看它。