0

我不确定这是否可以使用内置的 PIG 脚本来完成,或者我需要编写一个 UDF。但我基本上有一个表,我只是想转置数据。

简单地说,给定:

(1, 2, 3, 4, 5)
(6, 7, 8, 9, 10)
(11, 12, 13, 14, 15)
 ... 300 plus more tuples

我最终会得到:

(1,6,11,...) -> goes on for a few hundred more
(2,7,12,...)
(3,8,13,...)
(4,9,14,...)
(5,10,15,...)

关于我如何做到这一点的任何建议?

4

1 回答 1

1

这对 Pig 来说是不可能的,也没有多大意义。请记住,关系是一个元组包,根据定义,一个包不能保证其元组具有任何特定顺序。你可以从

(1, 2, 3, 4, 5)
(6, 7, 8, 9, 10)
(11, 12, 13, 14, 15)

但从 Pig 的角度来看,这与

(11, 12, 13, 14, 15)
(1, 2, 3, 4, 5)
(6, 7, 8, 9, 10)

这意味着“转置”定义不明确。这样看——如果你转置两次,你最终应该得到相同的数据结构,但是因为元组可以在此过程中重新排序,所以不能保证会发生这种情况。

最后,如果你真的必须做矩阵运算,你最好使用一个尊重行和列排序的工具。

也就是说,你想要完成什么?

于 2012-11-21T17:32:24.157 回答