加入兩個數據框後,我發現列順序已經改變了我的設想。例如:將[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。是否有任何方法允許交換或重新排序數據幀列?
加入兩個數據框後,我發現列順序已經改變了我的設想。例如:將[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。是否有任何方法允許交換或重新排序數據幀列?
一個這樣做的方式你加入後重新排序:
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)的... –
在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:_*)
http://stackoverflow.com/help/how-to-ask –