RDD的持久化

  1. 为什么要持久化
    action操作时,触发之前的transform算子,action执行完,只保留了最后的结果,之前的RDD会被丢掉,如果后面又要进行action操作,则需要从最初的RDD重新计算。rdd持久化后,只在第一次计算时,进行计算,之后再使用该RDD直接读取缓存,无需计算。

  2. 持久化方式
    persist()或cache(),二者的区别是,cache() 方法其实调用的就是persist()方法,缓存策略均为MEMORY_ONLY;

  3. 持久化级别
    MEMORY_ONLY:RDD作为反序列化的对象存储在内存中,若内存存不下, 一些partition不会被缓存,需要时重新计算,默认级别。
    MEMORY_AND_DISK:RDD作为反序列化对象存在内存中,若内存存不下,超出的partition存入硬盘。
    MEMORY_ONLY_SER:RDD作为序列化对象存在内存,空间利用率更高,读取时会占用cpu,可使用kyro序列化方式进行序列化。
    MEMORY_AND_DISK_SER:RDD作为序列化对象存在内存中,若内存存不下,超出的partition存入硬盘。
    DISK_ONLY:只将RDD分区存在硬盘上。
    MEMORY_ONLY_2:在集群上存两份
    MEMORY_AND_DISK_2:在集群上存两份

  4. 持久化的优化点
    如果内存不充足,可使用序列化的持久化级别对rdd进行持久化,序列化后RDD每个partition的数据都是一个字节数组,大大节省内存空间和磁盘io性能消耗,但是需要使用RDD时,要先对RDD进行反序列化增加性能开销。
    使用kyro序列化,减少序列化后的空间,且具有更快的序列化速度。使用kyro序列化。自定义对象要先注册,缓存大小需要设置,默认2M。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值