首页 > 解决方案 > spark在不使用var的情况下覆盖数据框变量

问题描述

我有一个 API 可以对数据框执行删除操作,如下所示

def deleteColmns(df:DataFrame,clmList :List[org.apache.spark.sql.Column]):DataFrame{
    var ddf:DataFrame = null 
    for(clm<-clmList){
       ddf.drop(clm)
    }
return ddf
}

既然在函数式编程中使用var不是一个好习惯,那么如何避免这种情况呢?

标签: apache-sparkapache-spark-sql

解决方案


使用Spark >2.0,您可以使用一系列列名删除多个列:

val clmList: Seq[Column] = _
val strList: Seq[String] = clmList.map(c => s"$c")
df.drop(strList: _*)

否则,您始终可以使用foldLeftto fold left on theDataFrame并放下您的列:

clmList.foldLeft(df)((acc, c) => acc.drop(c))

我希望这有帮助。


推荐阅读