问题
我有一个由嵌套元组组成的内袋,这对于我的预期模式来说是不必要的。我想删除其中一个元组层,这样我就只剩下一个简单的内袋了。我正在使用猪 0.14。
例子
我的输入数据样本。
((1,100,0),(2))
((1,100,1),(3,500,60))
我想要的输出。
(100,{(2),(3,500,60)})
经过一些小的操作(见下文)后,我的当前状态引发了上述问题。
(100,{((2)),((3,500,60))})
尝试
我觉得我的复杂之处在于我试图对元组中的一个项目进行分组。我做了一个简单的 group 语句,它似乎将分组元素留在了元组中(我对 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)})
我错过了什么?