在Scala中将列转换为行

时间:2017-04-04 09:02:46

标签: scala pandas pyspark transpose

我正在寻找在Scala中将行转换为列的解决方案。经过几个小时的调查结果,我仍然无法弄清楚这一点。请查看下面的示例,了解输入和我的预期输出。

输入:

+--------+--------+--------+
|   A    |    B   |    C   |
+--------+--------+--------+
|   10   |   15   |    6   |
+--------+--------+--------+

输出:

+--------+--------+
|   A    |   10   |
+--------+--------+
|   B    |   15   |
+--------+--------+
|   C    |    6   |
+--------+--------+

2 个答案:

答案 0 :(得分:0)

如果行数(列表)是任意的,您可以遵循以下模式:

for { (e1, e2) <- (list1 zip list2) } yield List(e1, e2) 

否则可能是这样的:

def rows2cols[T](rows: List[List[T]]) = {
  //assuming equal length skipping checks for emptiness:
  for (el <- 0 until rows.head.length) yield {
    rows.map(_(el))
  }
}

rows2cols(List(
  List(1,2,3),
  List(4,5,6)
))

//Vector(List(1, 4), List(2, 5), List(3, 6))

当然,上面的代码非常简化,缺少对长度,空白等的所有必要检查。

答案 1 :(得分:0)

您可以在scala中使用List.transpose

val xs = List(List(1, 2, 3), List(4, 5, 6)).transpose
xs: List[List[Int]] = List(List(1, 4), List(2, 5), List(3, 6))