从包中提取有序的元组值

时间:2012-08-10 17:26:33

标签: hadoop apache-pig

在猪身上,我将数据按摩为:

(a,{(b,c),(d,e),(f,g)})
(h,{(i,j),(k,l)})

其中第一项是组,而包是与该组相关的其他值。我想把它变成以下格式:

(a,b,c,d,e,f,g)
(h,i,j,k,l)

我到了现在的位置

grunt> j = foreach G {            
>>     o = order myvar by second;
>>     generate group, o.(first,second);
>> };

因此,目前订购的袋子中的元组。如果我执行类似mystuff = foreach j generate group, flatten($1);的操作,我会将其全部展平并取消分组。

猪可以这样做,如果是的话,我应该看一下这个命令吗?

1 个答案:

答案 0 :(得分:3)

我无法做到你想要的开箱即用的东西。你真的需要使用user-defined function。我知道它很糟糕,因为你必须编写Java或Python代码,但是你会发现几种情况下Pig还远远不够。 Pig可以被认为是一种数据流语言而不是编程语言,这就是UDF发挥如此重要作用的原因:它们弥合了这一差距。

我的建议是你写一个UDF,它将group和值包作为参数。在UDF中进行排序/排序以及展平。


您要注意的另一件事是,现在您的行将具有不同数量的列,而Pig并不是真的喜欢这样。如果您只是立即输出它,您可能可以逃脱这一点。您可能需要考虑让UDF以制表符分隔的字符串或预先格式化的内容写出列表。这不是什么大不了的事......可以随意忽略我的建议。

相关问题