Answers:
使用时cache()
,仅使用默认存储级别:
MEMORY_ONLY
对于RDDMEMORY_AND_DISK
用于数据集使用persist()
,您可以为RDD和数据集指定所需的存储级别。
从官方文档:
- 您可以
RDD
使用persist
()或cache
()方法将其标记为要保留。- 每个持久化
RDD
可以使用不同的存储storage level
- 在
cache
()方法是用于使用所述默认存储水平,这是一个速记StorageLevel.MEMORY_ONLY
(存储在反序列化存储器对象)。
persist()
如果您要分配以下存储级别,请使用:
MEMORY_ONLY
到RDDMEMORY_AND_DISK
用于数据集官方文档的有趣链接:选择哪种存储级别
MEMORY_AND_DISK
是仅数据集的默认值。MEMORY_ONLY
仍然是RDD的默认值
cache
和persist
运算之间的区别纯粹是语法上的。缓存是persist或persist(MEMORY_ONLY
)的同义词,即cache
仅persist
具有默认存储级别MEMORY_ONLY
/ ** *使用默认存储级别(
MEMORY_ONLY
)保留此RDD 。* /
defpersist():this.type =持久(StorageLevel.MEMORY_ONLY)/ ** *使用默认存储级别(
MEMORY_ONLY
)保留此RDD 。* /
def cache():this.type =持久性()
在这里查看更多详细信息...
缓存或持久性是用于(迭代和交互式)Spark计算的优化技术。它们有助于保存临时的部分结果,以便可以在后续阶段中重复使用。因此,这些临时结果RDD
s被保存在内存中(默认值)或更多固态存储(如磁盘)和/或已复制。
RDD
可以使用cache
操作进行缓存。也可以使用persist
操作将其保留。
persist
,cache
这些功能可用于调整的存储级别
RDD
。释放内存时,Spark将使用存储级别标识符来确定应保留哪些分区。参数less的变体persist
()和cache
()只是的缩写persist(StorageLevel.MEMORY_ONLY).
警告:一旦更改了存储级别,便无法再次更改!
仅仅因为您可以RDD
在内存中缓存a 并不意味着您应该盲目地这样做。根据访问数据集的次数以及这样做所涉及的工作量,重新计算的速度可能快于增加的内存压力所付出的代价。
不用说,如果仅在没有意义进行缓存时才读取数据集,则实际上会使您的工作变慢。可以从Spark Shell中看到缓存的数据集的大小。
列出变体...
def cache(): RDD[T]
def persist(): RDD[T]
def persist(newLevel: StorageLevel): RDD[T]
*请参见以下示例:*
val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2)
c.getStorageLevel
res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1)
c.cache
c.getStorageLevel
res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)
注意:由于RDD
s的缓存和持久性之间的语法差异非常小,而且纯粹是语法上的区别,因此这两个术语通常可以互换使用。
在此处查看更多内容...。
保留在内存和磁盘中:
缓存可以在很大程度上提高应用程序的性能。
cache()
现在使用MEMORY_AND_DISK