Apache pig 平铺在猪身上到底是如何工作的

Apache pig 平铺在猪身上到底是如何工作的,apache-pig,Apache Pig,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

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)

我真的很难知道扁平化是如何工作的。
提前谢谢

为了更好地理解,首先描述关系C并检查其模式。 它应该类似于-

describe C;
C: {A::group: bytearray, A: {()}, B: {()}}
现在,您正在C上进行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)

您可以在“编程猪”一书中查看更多示例

希望这有帮助