中间计数是否总是需要缓存以避免重新计算火花?

时间:2019-04-08 18:11:42

标签: apache-spark

我的spark应用程序包含一个初始RDD,我对其执行了10次转换。此火花应用程序的DAG是完全线性的。如果我想对前5次转换后的RDD中的记录数进行计数,我是否需要对其进行缓存以避免从头开始重新计算RDD?

我知道,如果您在同一个RDD上执行2个不同的转换,则需要缓存原始RDD以防止重新计算。我的问题是:如果您在同一RDD上执行一项操作和一项转换,您是否仍需要缓存?

例如,

val rdd2 = initalRDD.map(<something>)
val rdd3 = rdd2.map(<something>)
println(rdd3.count)
val rdd4 = rdd3.map(<something>) 

rdd3是否需要缓存来避免重新计算,因为它同时执行计数和映射?

1 个答案:

答案 0 :(得分:1)

的确如此,但是仅假设您还将对rdd4进行一些操作。转换不会自行执行DAG。因此,如果您只有Transforms,那么您真正拥有的是什么,答案是否定的。

如果您没有计数,只有一个操作管道,并且最终只有一个Action,那么在rdd3上就不需要缓存。