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

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

问题描述:

加入两个数据框后,我发现列顺序已经改变了我的设想。例如:将[b,c,d,e][a,b]b的列连​​接的两个数据帧产生列顺序[b,a,c,d,e]Spark Dataframes:如何更改Java/Scala中列的顺序?

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

+0

http://*.com/help/how-to-ask –

一个这样做的方式你加入后重新排序:

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

一旦数据帧变成在其列数笨重和顺序是更比单个交换还是两个,还有其他什么方法?我的猜测是关于'columns()'(Java API)的... –

在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:_*)