我有一个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:_*)
答案 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")