如何编写一个函数,该函数采用 DataFrame 的列名列表,对左侧选定的列重新排序并保留未选定的列
How to write a function that takes a list of column names of a DataFrame, reorders selected columns the left and preserves unselected columns
我想构建一个函数
def reorderColumns(columnNames: List[String]) = ...
可以应用于 Spark DataFrame,以便将 columnNames
中指定的列重新排序到左侧,其余列(以任何顺序)保持在右侧。
示例:
给定一个包含以下 5 列的 df
|一个 |乙 |丙 | D | E
df.reorderColumns(["D","B","A"]) returns 列顺序如下的 df:
| D |乙 |一个 |丙 | E
试试这个:
def reorderColumns(df: DataFrame, columns: Array[String]): DataFrame = {
val restColumns: Array[String] = df.columns.filterNot(c => columns.contains(c))
df.select((columns ++ restColumns).map(col): _*)
}
用法示例:
val spark: SparkSession = SparkSession.builder().appName("test").master("local[*]").getOrCreate()
import spark.implicits._
val df = List((1, 3, 1, 6), (2, 4, 2, 5), (3, 6, 3, 4)).toDF("colA", "colB", "colC", "colD")
reorderColumns(df, Array("colC", "colB")).show
// output:
//+----+----+----+----+
//|colC|colB|colA|colD|
//+----+----+----+----+
//| 1| 3| 1| 6|
//| 2| 4| 2| 5|
//| 3| 6| 3| 4|
//+----+----+----+----+
我想构建一个函数
def reorderColumns(columnNames: List[String]) = ...
可以应用于 Spark DataFrame,以便将 columnNames
中指定的列重新排序到左侧,其余列(以任何顺序)保持在右侧。
示例: 给定一个包含以下 5 列的 df
|一个 |乙 |丙 | D | E
df.reorderColumns(["D","B","A"]) returns 列顺序如下的 df:
| D |乙 |一个 |丙 | E
试试这个:
def reorderColumns(df: DataFrame, columns: Array[String]): DataFrame = {
val restColumns: Array[String] = df.columns.filterNot(c => columns.contains(c))
df.select((columns ++ restColumns).map(col): _*)
}
用法示例:
val spark: SparkSession = SparkSession.builder().appName("test").master("local[*]").getOrCreate()
import spark.implicits._
val df = List((1, 3, 1, 6), (2, 4, 2, 5), (3, 6, 3, 4)).toDF("colA", "colB", "colC", "colD")
reorderColumns(df, Array("colC", "colB")).show
// output:
//+----+----+----+----+
//|colC|colB|colA|colD|
//+----+----+----+----+
//| 1| 3| 1| 6|
//| 2| 4| 2| 5|
//| 3| 6| 3| 4|
//+----+----+----+----+