Spark Dataframes:如何在Java/Scala中更改列的顺序?



在连接两个数据框之后,我发现列顺序已经改变了我想象中的顺序。

示例:在b上连接具有列[b,c,d,e][a,b]的两个数据帧,得到列顺序为[b,a,c,d,e]

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

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

为了解决您的示例,您可以通过DataFrame.columns获得现有列的列表,该列表返回字符串数组。然后对该数组进行排序,并将值转换为列。然后,您可以"splat"输出到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:_*)

一种方法是在join之后重新排序:

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|
+---+----+

相关内容

  • 没有找到相关文章

最新更新