我的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是否需要缓存来避免重新计算,因为它同时执行计数和映射?
答案 0 :(得分:1)
的确如此,但是仅假设您还将对rdd4进行一些操作。转换不会自行执行DAG。因此,如果您只有Transforms,那么您真正拥有的是什么,答案是否定的。
如果您没有计数,只有一个操作管道,并且最终只有一个Action,那么在rdd3上就不需要缓存。