DataFrame 中的 Spark Scala 动态列选择

Spark Scala Dynamic column selection from DataFrame

我有一个 DataFrame,它有不同类型的列。在这些列中,我需要从该 DataFrame 中检索特定列。 硬编码的 DataFrame select 语句将是这样的:

val logRegrDF = myDF.select(myDF("LEBEL_COLUMN").as("label"),
col("FEATURE_COL1"), col("FEATURE_COL2"), col("FEATURE_COL3"), col("FEATURE_COL4"))

其中 LEBEL_COLUMN 和 FEATURE_COLs 将是动态的。 我有像这样的那些 FEATURE 列的 Array 或 Seq:

val FEATURE_COL_ARR = Array("FEATURE_COL1","FEATURE_COL2","FEATURE_COL3","FEATURE_COL4")

我需要在第 2 部分中将此列集合数组与 SELECT 语句一起使用。 在 select 中,第一列将是一个 (LABEL_COLUMN),其余的将是动态列表。

能否请您帮助我使 select 语句在 SCALA 中工作。

注: 下面给出的示例代码正在运行,但我需要在 SELECT

的第二部分添加列数组
val colNames = FEATURE_COL_ARR.map(name => col(name))
val logRegrDF = myDF.select(colNames:_*)  // it is not the requirement

我想第二部分的代码应该是这样的,但它不起作用:

val logRegrDF = myDF.select(myDF("LEBEL_COLUMN").as("label"), colNames:_*)

如果我理解你的问题,我希望这就是你要找的东西

val allColumnsArr = "LEBEL_COLUMN" +: FEATURE_COL_ARR
result.select("LEBEL_COLUMN", allColumnsArr: _*)
  .withColumnRenamed("LEBEL_COLUMN", "label")

希望对您有所帮助!

非常感谢@Shankar。

虽然你给的建议没有用,但我从你的建议中得到了一个想法,并通过这种方式解决了问题

val allColumnsArr = "LEBEL_COLUMN" +: FEATURE_COL_ARR
val colNames = allColumnsArr.map(name => col(name)) 
myDF.select(colNames:_*).withColumnRenamed("LEBEL_COLUMN", "label")

也可以这样,无需创建 DataFrame 列:

result.select(LEBEL_COLUMN, FEATURE_COL_ARR: _*) .withColumnRenamed(LEBEL_COLUMN, "label")