RDD 数据的持久化
每个 job 都会重新进行计算, 在有些情况下是没有必要, 如何解决这个问题呢?
Spark 一个重要能力就是可以持久化数据集在内存中....当我们持久化一个 RDD 时, 每个节点都会存储他在内存中计算的那些分区, 然后在其他的 action 中可以重用这些数据. 这个特性会让将来的 action 计算起来更快(通常块 10 倍)....对于迭代算法和快速交互式查询来说, 缓存(Caching)是一个关键工具.
可以使用方法persist()或者cache()来持久化一个 RDD....RDD 的各个 Partition 是相对独立的, 因此只需要计算丢失的部分即可, 并不需要重算全部 Partition
另外, 允许我们对持久化的 RDD 使用不同的存储级别.
...有一点需要说明的是, 即使我们不手动设置持久化, Spark 也会自动的对一些 shuffle 操作的中间数据做持久化操作(比如: reduceByKey).