我不完全理解缓存/检查点在Spark中的工作方式,我想知道是否应该在以下(过于简化的)代码内使用检查点:
initialRDD = sc.wholeTextFiles("path")
.
. some quite heavy transformations and ETL
.
finalRDD = result of all those trasformations
firstResult = finalRDD.map(some func).collect()
secondResult = finalRDD.map(some other func).collect()
从我的角度来看,finalRDD
将被计算两次,每个collect()
动作将被计算一次。从Spark文档中,cache
方法将保持整个行数,因此我不知道在缓存finalRDD
之后是否将计算两次或一次。
我应该对其进行缓存,检查点还是Spark足够聪明以仅计算一次?