在RDD持久性方面,spark中的cache()和persist()有什么区别?


当前回答

Cache()和persist()这两个方法都用于提高spark计算的性能。这些方法有助于保存中间结果,以便在后续阶段中重用。

cache()和persist()之间的唯一区别是,使用cache技术,我们可以只在需要时将中间结果保存在内存中,而在persist()中,我们可以将中间结果保存在5个存储级别(MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY)。

其他回答

Spark提供了5种存储级别

MEMORY_ONLY MEMORY_ONLY_SER MEMORY_AND_DISK MEMORY_AND_DISK_SER DISK_ONLY

cache()将使用MEMORY_ONLY。如果你想使用其他方法,请使用persist(StorageLevel.<*type*>)。

默认情况下,persist()会 将数据作为未序列化的对象存储在JVM堆中。

没有区别。从RDD.scala。

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()

耐心:

Same

如果不传递参数,persist()和cache()是相同的,使用默认设置:

当RDD: MEMORY_ONLY 当数据集:MEMORY_AND_DISK

的区别:

与cache()不同,persist()允许你在括号内传递参数,以指定级别:

坚持(MEMORY_ONLY) 坚持(MEMORY_ONLY_SER) 坚持(MEMORY_AND_DISK) 坚持(MEMORY_AND_DISK_SER) 坚持(DISK_ONLY)

瞧!

使用cache(),你只使用默认的存储级别:

MEMORY_ONLY用于RDD MEMORY_AND_DISK用于数据集

使用persist(),可以为RDD和Dataset指定需要的存储级别。

官方文件显示:

您可以使用persist()或cache()方法将RDD标记为持久化。 每个持久化RDD可以使用不同的存储级别存储 cache()方法是使用默认存储级别StorageLevel的简写。MEMORY_ONLY(在内存中存储反序列化对象)。

使用persist()如果你想分配一个存储级别而不是:

MEMORY_ONLY到RDD 或MEMORY_AND_DISK为数据集

官方文档的有趣链接:选择哪个存储级别

Cache()和persist()这两个方法都用于提高spark计算的性能。这些方法有助于保存中间结果,以便在后续阶段中重用。

cache()和persist()之间的唯一区别是,使用cache技术,我们可以只在需要时将中间结果保存在内存中,而在persist()中,我们可以将中间结果保存在5个存储级别(MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY)。