【问题标题】:Spark Dataframes: How can I change the order of columns in Java/Scala?Spark Dataframes:如何更改 Java/Scala 中的列顺序?
【发布时间】:2016-10-31 05:56:45
【问题描述】:

加入两个数据框后,我发现列顺序已经改变了我的预期。

例如:在b 上使用列[b,c,d,e][a,b] 连接两个数据框会产生[b,a,c,d,e] 的列顺序。

如何更改列的顺序(例如,[a,b,c,d,e])? 我已经找到了在 Python/R 但不是 Scala 或 Java 中做到这一点的方法。是否有任何方法允许交换或重新排序数据框列?

【问题讨论】:

标签: java scala dataframe spark-dataframe


【解决方案1】:

在 Scala 中,您可以使用 "splat" (:_*) 语法将可变长度的列列表传递给 DataFrame.select() 方法。

为了解决您的示例,您可以通过DataFrame.columns 获取现有列的列表,该列表返回一个字符串数组。然后只需对该数组进行排序并将值转换为列。然后你可以“喷”到select() 方法:

val mySortedCols = myDF.columns.sorted.map(str => col(str))
// Array[String]=(b,a,c,d,e) => Array[Column]=(a,b,c,d,e)

val myNewDF = myDF.select(mySortedCols:_*)

【讨论】:

  • Java 中的等价物是什么?
【解决方案2】:

一种方法是在加入后重新排序:

case class Person(name : String, age: Int)
val persons = Seq(Person("test", 10)).toDF

persons.show
+----+---+
|name|age|
+----+---+
|test| 10|
+----+---+

persons.select("age", "name").show

+---+----+
|age|name|
+---+----+
| 10|test|
+---+----+

【讨论】:

  • 一旦数据框的列数变得笨拙,并且顺序不止一次或两次交换,还有其他方法吗?我的猜测是与columns()(Java API) ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多