RDD的缓存

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()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早拾碗吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值