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。是否有任何方法允许交换或重新排序数据帧列?
答
一个这样做的方式你加入后重新排序:
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:_*)
http://stackoverflow.com/help/how-to-ask –