0

您好我正在尝试在具有 280 列的数据框中进行 scdtype2 更新。

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 分钟。有什么办法可以优化吗?

4

1 回答 1

1

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

val newYRecs = joinedDF.select(stgDF.columns.map{ colName =>
      coalesce(col("stg." + colName), col("tgt."+ colName)) as colName
}: _*)
于 2021-03-19T20:31:01.093 回答