如何将Pig元组拆分为子元组?

Mar*_*Aja 0 apache-pig

以下是我在Pig脚本中操作的元组:

DUMP A
(4,20,53,31)
(21,3,40,16)
(15,51,12,3)
Run Code Online (Sandbox Code Playgroud)

我会将这种关系(A)转换成另一种关系(B),例如:

DUMP B
(4,20)
(4,53)
(4,31)
(21,3)
(21,40)
(21,16)
(15,51)
(15,12)
(15,3)
Run Code Online (Sandbox Code Playgroud)

这意味着保留所有元组中的第一个字段并在每个字段中获得一个元组.在前面的示例中,每个元组必须提供3个新元组.我有一个解决方案:

DUMP B
(4,20)
(21,3)
(15,51)
(4,53)
(21,40)
(15,12)
(4,31)
(21,16)
(15,3)
Run Code Online (Sandbox Code Playgroud)

哪个是好结果,但顺序错误(我每次都使用FOREACH运算符).我可以通过向每个元组添加一个字段然后使用ORDER运算符来获得正确的顺序,但我认为有一种更简单的方法.

任何的想法?

谢谢.

mr2*_*ert 5

你可以这样做:

-- T is the name of the tuple, and v[1-4] are the values in the tuple
B = FOREACH A GENERATE T.v1, FLATTEN(TOBAG(T.v2, T.v3, T.v4)) ;
Run Code Online (Sandbox Code Playgroud)

如果值没有名称,您还可以执行以下操作:

B = FOREACH A GENERATE T.$0, FLATTEN(TOBAG(T.$1, T.$2, T.$3)) ;
Run Code Online (Sandbox Code Playgroud)

输出:

(4,20)
(4,53)
(4,31)
(21,3)
(21,40)
(21,16)
(15,51)
(15,12)
(15,3)
Run Code Online (Sandbox Code Playgroud)