a:(1,2,3)(4,2,1)(8,3,4)(4,3,3)(7,2,5)(8,4,3)
b:(2,4)(8,9)(1,3)(2,7)(2,9)(4,6)(4,9)
c:(1,{(1,2,3)},{(1,3)})(4,{(4,2,1),(4,3,3)},{(4,6),(4,9)})(8,{(8,3,4),(8,4,3)},{(8,9)})
嗨,朋友们,对于上面的文件a,b和c,有人能解释一下下面的陈述会有什么结果吗?x=对于每个c,生成展平(a.($0,$1)),展平(b.$1);
我真的很难知道如何扁平工作。提前谢谢!
1条答案
按热度按时间wko9yo5t1#
为了更好的理解,首先对关系c进行描述并检查其模式。它应该类似于-
现在您在c上用一个flatten做一个foreach,记住下面的经验法则-foreach用一个flatten生成包中每个记录与generate语句中所有其他表达式的叉积。
现在让我们考虑第一个元组与c的关系
为了更好的理解,我可以把它表示为
对于bag中的每个记录,我们只有一个项,因此只有一个叉积,因此在这个迭代的输出中只有一个元组,即(1,2,3)
现在让我们考虑第二个元组与c的关系,如下图所示,a有两条记录,b有两条记录,它们的叉积为2x2=4,因此我们将在输出中看到4条记录-
现在让我们看看第三个元组与c的关系,这里a有2条记录,而b只有1条记录,我们得到2x1=2个输出行,(8,3,9)(8,4,9)
你可以在“编程Pig”一书中查看更多的例子
希望这有帮助。