我有以下代码片段,工作正常。
所以这里是代码中的2个动作。 updateDF.first()
和mergedDF.save()
updateDF.count()
这是一个虚拟动作,如果我删除它的工作失败了。是否有必要在代码中强制执行此类操作。我感觉如果我删除updateDF.count()
,它会首先在mergedDF.save()
上遇到操作。当它计算mergedDF.save()
时,它会创建更多的中间数据帧,从而导致作业失败。您能否建议更改代码以使其更好。
newDataDF.persist()
val historyDataDF=hiveContext.read.format("orc").load(stagingFullPath).persist()
val updateDF = historyDataDF.coalesce(5).join(newDataDF, jobPrimaryKey).select(historyDataDF.columns.map(historyDataDF(_)): _*).persist()
println(updateDF.count())
val unchangedDF = historyDataDF.except(updateDF).persist()
val mergedDF = unchangedDF.unionAll(newDataDF).persist()
mergedDF.write.format("orc").mode(org.apache.spark.sql.SaveMode.Overwrite).save(stagingFullPath)