Scala 为什么我的Spark作业执行两次数据库读取,如何避免

Scala 为什么我的Spark作业执行两次数据库读取,如何避免,scala,apache-spark,Scala,Apache Spark,我的数据工作流程是: rawDf->modifiedDf->rollUpDf->union(modifiedDf,rollUpDf)->保存 表演不够好 我发现了两个数据库读取操作,一个在阶段60(生成rollUpDf)中,另一个在阶段61中。我不明白为什么它需要读取数据库两次,因为modifiedDf和rollUpDf都来自同一个源 一种提高性能的方法是使用rawDf.cache()仅从数据库检索一次数据,然后修改数据帧并将数据帧上卷。这有助于避免从数据库中读取两次数据。 参考:df.cach

我的数据工作流程是:

rawDf->modifiedDf->rollUpDf->union(modifiedDf,rollUpDf)->保存

表演不够好

我发现了两个数据库读取操作,一个在阶段60(生成rollUpDf)中,另一个在阶段61中。我不明白为什么它需要读取数据库两次,因为modifiedDf和rollUpDf都来自同一个源


一种提高性能的方法是使用
rawDf.cache()
仅从数据库检索一次数据,然后修改数据帧并将数据帧上卷。这有助于避免从数据库中读取两次数据。
参考:

df.cache()是否为将来的作业存储数据帧?在我的用例中,可能有多个用户同时发送聚合请求(来自同一个表,但可能有不同的过滤器)。该
df.cache()
将被多次调用,这是否会弄乱存储的数据?每个批都会进行缓存,一旦批处理完成,缓存就会消失。