对RDD的转换过程中,如果要对中间某个RDD复用多次,比如对RDD进行多次输出,那么默认情况下每次Action都会触发一个job,每个job都会从头开始加载数据并重新计算,浪费时间。
如果将逻辑上的RDDn的数据持久化到具体的存储介质上比如内存、磁盘、堆外内存,那么只用计算一次该RDD,不就可以提高程序性能了吗。
我们可以使用缓存函数:cache()、persist() 来持久化存储某个RDDn的数据集到内存或磁盘中,方便后期复用该RDD时无需从头计算。
以下3个例子都是仅持久化到内存:
- rdd.cache()
- 等价于 rdd.persist()
- 等价于 rdd.persist(storageLevel=StorageLevel.MEMORY_ONLY)
更多储存级别:
# 表示不缓存
StorageLevel.NONE # StorageLevel(False, False, False, False)
# 表示缓存数据到磁盘中
StorageLevel.DISK_ONLY # StorageLevel(True, False, False, False)
StorageLevel.DISK_ONLY_2 # StorageLevel(True, False, False