如何在 PIG 中转置列和行

Posted

技术标签:

【中文标题】如何在 PIG 中转置列和行【英文标题】:How Do I transpose columns and rows in PIG 【发布时间】:2012-11-21 17:20:47 【问题描述】:

我不确定这是否可以使用内置 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,...)

关于我如何实现这一点的任何建议?

【问题讨论】:

【参考方案1】:

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

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

但从猪的角度来看,这和

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

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

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

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

【讨论】:

谢谢,你回答了我的问题:)。我正在对数据进行一些关联,但我采用了不同的方法。

以上是关于如何在 PIG 中转置列和行的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中转置列和行的简单方法?

以“错误”的方式呈现表格:转置列和行?

如何在 Flutter 中将列和行项居中?

c#中如何获取MYSQL数据库名称、表、列和行

如何设置JTable列和行颜色?

如何识别两个数据矩阵之间的哪些列和行匹配?