缓存方式:cache, persist
特点:并不是调用时立即执行,必须遇到行动算子时才会缓存。因此第一次运行速度并不会变快,只有下次执行时才会生效。
rdd.cache()
:缓存数据目前来说,spark的缓存位置和级别非常优秀,一般无需修改。缓存不会切断血缘关系,如果缓存后面的计算出错,会重新将缓存前的计算再做一遍。
将某个RDD数据落盘保存,如果检查点之后出现问题,可以从检查点开始重做,减少开销。
sc.setCheckpointDir("ck");
rdd.checkpoint()
: 保存某个RDD的数据分布式共享只读变量,向所有工作节点executor发送一个只读变量。每个executor可以有多个Task, 由于Task是计算的基本单位,本来需要将共享的变量向每个节点都发送一份。 因此可以将变量直接发送给executor,减少通信压力。