在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)。
推荐文章
- 缓存和持久化的区别是什么?
- Apache Spark:内核数量vs.执行器数量
- 任务不可序列化:java.io.NotSerializableException,当只对类而不是对象调用闭包外部的函数时
- Spark Java .lang. outofmemoryerror: Java堆空间
- Spark独立集群中的worker、executor和core是什么?
- map和flatMap之间的区别是什么,以及它们各自的良好用例?
- 如何在Spark Dataframe中显示完整的列内容?
- 如何在PySpark中更改数据帧列名?
- Spark中DataFrame、Dataset和RDD的区别
- Spark - repartition() vs coalesce()
- 解释Apache ZooKeeper