spark scala foldleft性能缓慢

1wnzp6jl  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(341)

嗨,我想做一个scdtype2更新的Dataframe有280列。

val newYRecs = stgDF.columns
                .foldLeft(joinedDF)
                  {(tempDF,colName) => 
                      tempDF.withColumn("new_" + colName, when(col("stg." + colName).isNull, col("tgt."+ colName)).otherwise(col("stg."  + colName))).drop(col("stg." + colName)).drop(col("tgt." + colName)).withColumnRenamed("new_" + colName,colName)

仅此操作就需要8分钟。有没有什么方法可以优化?

jdzmm42g

jdzmm42g1#

根据这篇文章,似乎 withColumn 在许多列上使用catalyst optimizer时,它有一个隐藏的成本,这会影响性能。我会尝试使用建议的解决方法并做类似的事情(同样,当你在做的时候,你可以使用 coalesce ):

val newYRecs = joinedDF.select(stgDF.columns.map{ colName =>
      coalesce(col("stg." + colName), col("tgt."+ colName)) as colName
}: _*)

相关问题