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

时间:2016-06-28 18:52:33

标签: java scala dataframe spark-dataframe

在加入两个数据帧之后,我发现列顺序已经改变了我认为的那样。

例如:在[b,c,d,e]上加入包含[a,b]b列的两个数据框会产生[b,a,c,d,e]的列顺序。

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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|
+---+----+