您好,我正在尝试在具有280列的dataframe中执行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分钟。有什么方法可以优化这一点吗?
发布于 2021-03-20 04:31:01
根据this的文章,withColumn似乎有一个隐藏的催化剂优化器的成本,当在许多列上使用时,会阻碍性能。我会尝试使用建议的变通方法,并做类似这样的事情(同时,您可以使用coalesce使您的代码更干净):
val newYRecs = joinedDF.select(stgDF.columns.map{ colName =>
coalesce(col("stg." + colName), col("tgt."+ colName)) as colName
}: _*)https://stackoverflow.com/questions/66712792
复制相似问题