问题
我有一个由嵌套元组组成的内部包,这些元组对于我期望的模式是不必要的。我想去掉一个元组层,这样我只剩下一个简单的内袋。我用的是Pig0.14。
示例
我输入数据的样本。
((1,100,0),(2))
((1,100,1),(3,500,60))
我想要的输出。
(100,{(2),(3,500,60)})
我目前的状态经过一些小的操作(见下文),这引发了上述问题。
(100,{((2)),((3,500,60))})
尝试
我觉得我的复杂之处在于,我试图对元组中的一个项进行分组。我做了一个简单的group语句,它似乎将分组的元素保留在tuple中(我对pig相当陌生)。
a = LOAD 'data' as (key:tuple(), data:tuple());
b = GROUP a BY key.$1;
c = FOREACH b GENERATE group as vid, b.data as data;
倾倒 c
提供上述不需要的输出。多部件键 (a,b,c)
需要脱光衣服 a
被移除, b
作为一个组使用,并且 c
可以删除或不删除,但只有在它被用来创建内袋。
试图 FLATTEN
解组元素。那我就可以了 FLATTEN
一次又一次地分组,但这似乎有点可笑。有比这更好的办法吗?
d = FOREACH c GENERATE vid, FLATTEN(data) as data;
e = FOREACH d GENERATE vid, FLATTEN(data);
f = GROUP e BY $0;
这仍然不能真正提供我想要的,因为它保留了钥匙:
(100,{(100,2),(100,3,500,60)})
我错过了什么?
1条答案
按热度按时间hc2pp10m1#
你可以试试这个。这会有点帮助。。但这不是一个有效的解决办法。让我们等待一些好的大脑发布他们的答案。
输入:
Pig脚本:
输出: