Spark Scala从DataFrame中选择动态列

时间:2017-07-27 09:54:35

标签: scala apache-spark dataframe apache-spark-ml

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

我需要在第二部分中使用这个SELECT列语句的列集合。 在选择中,第一列将是一个(LABEL_COLUMN),其余将是动态列表。

是否可以帮助我使用SCALA中的select语句。

注意: 下面给出的示例代码正在工作,但我需要在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:_*)

2 个答案:

答案 0 :(得分:1)

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

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

希望这有帮助!

答案 1 :(得分:0)

非常感谢@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")