在猪身上,我将数据按摩为:
(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);
的操作,我会将其全部展平并取消分组。
猪可以这样做,如果是的话,我应该看一下这个命令吗?
答案 0 :(得分:3)
我无法做到你想要的开箱即用的东西。你真的需要使用user-defined function。我知道它很糟糕,因为你必须编写Java或Python代码,但是你会发现几种情况下Pig还远远不够。 Pig可以被认为是一种数据流语言而不是编程语言,这就是UDF发挥如此重要作用的原因:它们弥合了这一差距。
我的建议是你写一个UDF,它将group
和值包作为参数。在UDF中进行排序/排序以及展平。
您要注意的另一件事是,现在您的行将具有不同数量的列,而Pig并不是真的喜欢这样。如果您只是立即输出它,您可能可以逃脱这一点。您可能需要考虑让UDF以制表符分隔的字符串或预先格式化的内容写出列表。这不是什么大不了的事......可以随意忽略我的建议。