我使用pig从元组生成组,如下所示:
a1, b1
a1, b2
a1, b3
...
->
a1, [b1, b2, b3]
...
这很简单,也很有效。但我的问题是得到以下结果:从获得的组中,我想生成组包中所有元组的集合:
a1, [b1, b2, b3]
->
b1,b2
b1,b3
b2,b3
如果我可以嵌套“foreach”,首先遍历每个组,然后遍历它的包,这将很容易。
我想我误解了这个概念,我将感谢你的解释。
谢谢。
我使用pig从元组生成组,如下所示:
a1, b1
a1, b2
a1, b3
...
->
a1, [b1, b2, b3]
...
这很简单,也很有效。但我的问题是得到以下结果:从获得的组中,我想生成组包中所有元组的集合:
a1, [b1, b2, b3]
->
b1,b2
b1,b3
b2,b3
如果我可以嵌套“foreach”,首先遍历每个组,然后遍历它的包,这将很容易。
我想我误解了这个概念,我将感谢你的解释。
谢谢。
3条答案
按热度按时间mwg9r5ms1#
看起来你需要一个笛卡尔积在袋子和它本身之间。要做到这一点,你需要使用扁平(袋)两次。
代码:
请注意,大袋子会产生很多行。为了避免这种情况,可以在展平之前使用top(…):
对于特定的输出,可以在展平之前使用一些过滤:
希望对你有帮助。
干杯
xt0899hw2#
与此相关的还有datafu udf库中的unorderedpairs函数。它生成一个包中所有项目的对(在您的情况下是您的分组包)
j8ag8udp3#
你可以用
GROUP ALL
要生成的pig语句