在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);
我把它都弄平了。
这在Pig身上可能吗?如果可能的话,我应该看什么命令?
1条答案
按热度按时间tuwxkamq1#
我不可能做你想做的事。您确实需要为此使用用户定义的函数。我知道这很糟糕,因为你必须编写java或python代码,但是你会发现pig做得不够。pig可以被认为是一种数据流语言,而不是一种编程语言,这就是为什么udf扮演着如此重要的角色:它们填补了这个鸿沟。
我的建议是你写一个接受
group
并以袋值为参数。在自定义项中进行排序和展平。另一件需要注意的事情是,现在您的行将有不同的列数,pig并不喜欢这样。如果你只是立即输出它,你可能会逃脱这个。您可能需要考虑让您的自定义项以制表符分隔的字符串或预先格式化的格式写出列表。这没什么大不了的。。。请不要理会我的建议。