FLATTEN究竟是如何在PIG中工作的

时间:2015-01-19 13:31:57

标签: apache-pig

    (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)),FLATTEN(B. $ 1);

我很难知道扁平化的效果如何。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

为了更好地理解,首先要对关系C进行描述并检查其架构。 它应该类似于 -

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

现在你正在做一个关于C的一个foreach和一个flatten,记得按照拇指规则 - foreach with flatten会生成包中每条记录的叉积,并生成所有其他表达式。

现在让我们考虑关系C中的第一个元组

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

为了更好地理解,我可以将其表示为

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

对于包中的每个记录,我们每个只有一个术语,因此只有一个交叉产品,因此只有一个元组获得此迭代的输出,即(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)

您可以查看书中的更多示例" Programming Pig"

希望这有帮助。