spark在不使用var的情况下覆盖了dataframe变量

时间:2018-11-15 13:25:09

标签: apache-spark apache-spark-sql

我有一个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 并不是一种好习惯,因此如何避免这种情况

1 个答案:

答案 0 :(得分:4)

使用 Spark> 2.0 ,您可以使用列名的序列删除多列:

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

否则,您始终可以使用foldLeftDataFrame上向左折叠并放下列:

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

我希望这会有所帮助。