RDD的缓存

RDD的缓存

码农世界 2024-05-27 前端 79 次浏览 0个评论

persist

persist() 用来设置RDD的存储级别.
常用的cache是persist的一种特例.
存储级别意义
MEMORY_ONLY将RDD作为反序列化的的对象存储在JVM中;如果RDD不能被内存装下,超出的分区将不会被缓存,并且在需要的时候被重新计算; 这是默认的级别.
MEMORY_AND_DISK将RDD作为反序列化的的对象存储在JVM中;如果RDD不能被内存装下,超出的分区将被保存在硬盘上,并且在需要时被读取.
MEMORY_ONLY_SER将RDD作为序列化的的对象进行存储(每一分区占用一个字节数组);通常来说,这比将对象反序列化的空间利用率更高,尤其当使用fast serializer,但在读取时会比较占用CPU
MEMORY_AND_DISK_SER与MEMORY_ONLY_SER相似,并且超出内存的分区将存储在硬盘上,而不是在每次需要的时候重新计算.
DISK_ONLY只将RDD分区存储在硬盘上.
MEMORY_ONLY_2,MEMORY_AND_DISK_2, etc.与上述的存储级别一样,并且将每一个分区都复制到集群的两个结点上(备份).
// 导入设置存储级别的类
import org.apache.spark.storage.StorageLevel    
// 生成RDD,并指定分区数
val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8),8)
// 设置存储级别    
val rdd2 = rdd1.persist(StorageLevel.DISK_ONLY)  
rdd2.count() 
rdd1.persist()  
cache和persist的区别:  
StorageLevel设定有12种缓存策略,可以根据自己的情况选择合适的.  
cache方法其实是persist方法的一个特例:调用的是无参数的persist(),代表缓存级别是仅内存的情况.
一般情况下建议使用persist(StorageLevel.MEMORY_AND_DISK)方法替代cache方法,以防止内存不足造成程序运行错误.
persist方法有三种:
1.默认无参数仅内存级别的persist();
2.persist(newLevel):这个方法需要之前对RDD没有设置过缓存级别;
3.persist(newLevel,allowOverride):这个方法适用于之前对RDD设置过缓存级别,但是需要修改缓存级别的情况.  

unpersist

// unpersist() 用于删除磁盘或内存中的相关序列化对象.取消缓存统一使用unpersist()方法.  
rdd2.unpersist()

转载请注明来自码农世界,本文标题:《RDD的缓存》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,79人围观)参与讨论

还没有评论,来说两句吧...

Top