在RDD持久性方面,spark中的cache()和persist()有什么区别?
RDD
cache()
persist()
tf7tbtn21#
对于cache(),您仅使用默认存储级别:
MEMORY_ONLY
MEMORY_AND_DISK
使用persist(),您可以为RDD和Dataset指定所需的存储级别。来自官方文件:
persist
cache
storage level
StorageLevel.MEMORY_ONLY
如果要分配以下存储级别以外的存储级别,请使用persist():
官方文档的有趣链接:选择哪个存储级别
xghobddn2#
cache和persist操作之间的差异纯粹是语法上的。cache是persist或persist(MEMORY_ONLY)的同义词,即cache仅仅是默认存储级别为MEMORY_ONLY的persist但是Persist()我们可以将中间结果保存在5个存储级别中。1.仅内存1.存储器和磁盘1.仅存储器SER1.存储器和磁盘SER1.仅磁盘/**使用默认存储级别(MEMORY_ONLY)保留此RDD。/def持续():此.类型=持久(存储级别.仅内存)/**使用默认存储级别(MEMORY_ONLY)保留此RDD。/def缓存():这个.类型= persist()在此查看更多详细信息...
Persist()
这些函数可以用来调整RDD的存储级别。当释放内存时,Spark将使用存储级别标识符来决定哪些分区应该保留。无参数变量persist()和cache()只是persist(StorageLevel.MEMORY_ONLY).的缩写
persist(StorageLevel.MEMORY_ONLY).
警告:存储级别一旦更改,就不能再更改!
可以在内存中缓存RDD并不意味着盲目地这样做。根据数据集被访问的次数以及这样做所涉及的工作量,重新计算可能比内存压力增加所付出的代价更快。不言而喻,如果您只读取一次数据集,而不缓存它,实际上会使您的作业变慢。缓存数据集的大小可以从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的缓存和持久化之间非常小且纯粹的语法差异,这两个术语经常互换使用。在此处查看更多直观信息....
保留在内存和磁盘中:
缓存可以在很大程度上提高应用程序的性能。
izkcnapc3#
没有区别,从RDD.scala。
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()
pobjuy324#
Spark提供5种类型的存储级别
MEMORY_ONLY_SER
MEMORY_AND_DISK_SER
DISK_ONLY
cache()将使用MEMORY_ONLY。如果要使用其他内容,请使用persist(StorageLevel.<*type*>)。默认情况下,persist()将数据作为非序列化对象存储在JVM堆中。
persist(StorageLevel.<*type*>)
z6psavjg5#
Cache()和persist()这两个方法都是用来提高spark计算的性能的,它们帮助保存中间结果,以便在后续阶段重用。cache()和persist()之间的唯一区别是,使用Cache技术,我们可以仅在需要时将中间结果保存在内存中,而在Persistt()中,我们可以将中间结果保存在5个存储级别(MEMORY_ONLY、MEMORY_AND_DISK、MEMORY_ONLY_SER、MEMORY_AND_DISK_SER、DISK_ONLY)中。
7vux5j2d6#
对于不耐烦:
如果不传递参数,persist()和cache()相同,使用默认设置:
Dataset
与cache()不同,persist()允许您在括号内传递参数,以便指定级别:
persist(MEMORY_ONLY)
persist(MEMORY_ONLY_SER)
persist(MEMORY_AND_DISK)
persist(MEMORY_AND_DISK_SER )
persist(DISK_ONLY )
瞧!
6条答案
按热度按时间tf7tbtn21#
对于
cache()
,您仅使用默认存储级别:MEMORY_ONLY
用于RDDMEMORY_AND_DISK
使用
persist()
,您可以为RDD和Dataset指定所需的存储级别。来自官方文件:
persist
()或cache
()方法将RDD
标记为持久化。RDD
可使用不同的storage level
来存储cache
()方法是使用默认存储级别的简写,默认存储级别是StorageLevel.MEMORY_ONLY
(将反序列化的对象存储在内存中)。如果要分配以下存储级别以外的存储级别,请使用
persist()
:MEMORY_ONLY
到RDDMEMORY_AND_DISK
官方文档的有趣链接:选择哪个存储级别
xghobddn2#
cache
和persist
操作之间的差异纯粹是语法上的。cache是persist或persist(MEMORY_ONLY
)的同义词,即cache
仅仅是默认存储级别为MEMORY_ONLY
的persist
但是
Persist()
我们可以将中间结果保存在5个存储级别中。1.仅内存
1.存储器和磁盘
1.仅存储器SER
1.存储器和磁盘SER
1.仅磁盘
/**使用默认存储级别(
MEMORY_ONLY
)保留此RDD。/def持续():此.类型=持久(存储级别.仅内存)
/**使用默认存储级别(
MEMORY_ONLY
)保留此RDD。/def缓存():这个.类型= persist()
在此查看更多详细信息...
RDD
的形式保存在内存中(默认值)或更坚固的存储,如磁盘和/或复制。RDD
可以使用cache
操作进行缓存。它们也可以使用persist
操作持久化。*一米十三分一秒,一米十四分一秒
这些函数可以用来调整
RDD
的存储级别。当释放内存时,Spark将使用存储级别标识符来决定哪些分区应该保留。无参数变量persist
()和cache
()只是persist(StorageLevel.MEMORY_ONLY).
的缩写警告:存储级别一旦更改,就不能再更改!
警告-谨慎缓存...请参阅((Why) do we need to call cache or persist on a RDD)
可以在内存中缓存
RDD
并不意味着盲目地这样做。根据数据集被访问的次数以及这样做所涉及的工作量,重新计算可能比内存压力增加所付出的代价更快。不言而喻,如果您只读取一次数据集,而不缓存它,实际上会使您的作业变慢。缓存数据集的大小可以从Spark Shell中看到。
正在列出变体...
参见以下示例:
注:由于
RDD
的缓存和持久化之间非常小且纯粹的语法差异,这两个术语经常互换使用。在此处查看更多直观信息....
保留在内存和磁盘中:
缓存:
缓存可以在很大程度上提高应用程序的性能。
izkcnapc3#
没有区别,从
RDD.scala
。pobjuy324#
Spark提供5种类型的存储级别
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
将使用MEMORY_ONLY
。如果要使用其他内容,请使用persist(StorageLevel.<*type*>)
。默认情况下,
persist()
将数据作为非序列化对象存储在JVM堆中。z6psavjg5#
Cache()和persist()这两个方法都是用来提高spark计算的性能的,它们帮助保存中间结果,以便在后续阶段重用。
cache()和persist()之间的唯一区别是,使用Cache技术,我们可以仅在需要时将中间结果保存在内存中,而在Persistt()中,我们可以将中间结果保存在5个存储级别(MEMORY_ONLY、MEMORY_AND_DISK、MEMORY_ONLY_SER、MEMORY_AND_DISK_SER、DISK_ONLY)中。
7vux5j2d6#
对于不耐烦:
一样
如果不传递参数,
persist()
和cache()
相同,使用默认设置:RDD
:仅内存Dataset
:存储器和磁盘差异:
与
cache()
不同,persist()
允许您在括号内传递参数,以便指定级别:persist(MEMORY_ONLY)
persist(MEMORY_ONLY_SER)
persist(MEMORY_AND_DISK)
persist(MEMORY_AND_DISK_SER )
persist(DISK_ONLY )
瞧!