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")
我有一个 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")