pyspark.RDD.persist

RDD. persist ( storageLevel : pyspark.storagelevel.StorageLevel = StorageLevel(False, True, False, False, 1) ) → pyspark.rdd.RDD [ T ] [source]

将此RDD的存储级别设置为在第一次计算后跨操作持久化其值。这只能在RDD尚未设置存储级别时用于分配新的存储级别。如果没有指定存储级别,默认值为( MEMORY_ONLY )。

新增于版本 0.9.1。

Parameters
storageLevel StorageLevel , default MEMORY_ONLY

目标存储级别

Returns
RDD

相同的 RDD 存储级别设置为 storageLevel

示例

>>> rdd = sc.parallelize(["b", "a", "c"])
>>> rdd.persist().is_cached
True
>>> str(rdd.getStorageLevel())
'Memory Serialized 1x Replicated'
>>> _ = rdd.unpersist()
>>> rdd.is_cached
False
>>> from pyspark import StorageLevel
>>> rdd2 = sc.range(5)
>>> _ = rdd2.persist(StorageLevel.MEMORY_AND_DISK)
>>> rdd2.is_cached
True
>>> str(rdd2.getStorageLevel())
'Disk Memory Serialized 1x Replicated'

无法覆盖现有的存储级别

>>> _ = rdd2.persist(StorageLevel.MEMORY_ONLY_2)
Traceback (most recent call last):
    ...
py4j.protocol.Py4JJavaError: ...

unpersist 之后分配另一个存储级别

>>> _ = rdd2.unpersist()
>>> rdd2.is_cached
False
>>> _ = rdd2.persist(StorageLevel.MEMORY_ONLY_2)
>>> str(rdd2.getStorageLevel())
'Memory Serialized 2x Replicated'
>>> rdd2.is_cached
True
>>> _ = rdd2.unpersist()