如何确切地扁平Pig工程

rkkpypqq  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(238)

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);
我真的很难知道如何扁平工作。提前谢谢!

wko9yo5t

wko9yo5t1#

为了更好的理解,首先对关系c进行描述并检查其模式。它应该类似于-

describe C;
C: {A::group: bytearray, A: {()}, B: {()}}

现在您在c上用一个flatten做一个foreach,记住下面的经验法则-foreach用一个flatten生成包中每个记录与generate语句中所有其他表达式的叉积。
现在让我们考虑第一个元组与c的关系

(1,{(1,2,3)},{(1,3)})

为了更好的理解,我可以把它表示为

(C::1,{A::(1,2,3)},{B::(1,3)})
A.($0,$1) = (1,2)
B.($1) = (3)

对于bag中的每个记录,我们只有一个项,因此只有一个叉积,因此在这个迭代的输出中只有一个元组,即(1,2,3)
现在让我们考虑第二个元组与c的关系,如下图所示,a有两条记录,b有两条记录,它们的叉积为2x2=4,因此我们将在输出中看到4条记录-

(C::4,{A::(4,2,1),A::(4,3,3)},{B::(4,6),B::(4,9)})
A.($0,$1) = (4,2) and (4,3)
B.($1) = (6) and (9)
--As output we will see cross product of all of the other expressions in the generate statement, hence we get
(4,2,6) (4,2,9) (4,3,6) (4,3,9)

现在让我们看看第三个元组与c的关系,这里a有2条记录,而b只有1条记录,我们得到2x1=2个输出行,(8,3,9)(8,4,9)
你可以在“编程Pig”一书中查看更多的例子
希望这有帮助。

相关问题