spark 中cache 和persist 区别与用法 欢迎指正

风流意气都作罢 提交于 2019-12-14 23:20:48

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

网上一大把资源来介绍cache的好处优点,但有的时候偏偏就是会溢出,那么来说说‘同父异母’的方法persist的使用吧  ,完美的解决了cache内存溢出的尴尬。

两者都是持久化Rdd的方式,但是persist方法是包含cache方法的:

在persist的持久化方法有很多种组和

MEMORU_ONLY 指的就是cache 参数代表的含义分别是:是否使用磁盘缓存、是否使用内存、是否使用对外内存、是否使用反序列化

DISK_ONLY:全部用磁盘缓存(一般你的需要持久化的RDD或者DF等特别大的时候可以用这种)

DISK_ONLY_2:和上边这个类似就是多了最后一个参数,表示每个分区在两个节点上创建副本

MEMORY_AND_DISK:使用磁盘加内存  (一般不是特别大的需求的时候比较推荐,最起码内存满了会自动写磁盘 )

最后几个带_SER:的就是用java对象的方式进行存储,相比于前几种的同类型存储来说就是速度快了,但是更吃cpu

不管那个方法用完记得释放:unpersist()!!!!

举例调用代码:

       //持久化防治溢出 调用persist方法 里面要传入相应的缓存等级,这里使用的是内存加磁盘
        Dataset<Row> goodsSpecPersist = goodsSpec.persist(StorageLevel.MEMORY_AND_DISK());
        //只用内存的方法
        Dataset<Row> goodsPersist = goods.cache();


      //解除缓存
        goodsSpecPersist.unpersist();
        goodsPersist.unpersist();

初学者使用注意事项,在上面代码中 持久化后一定要有行动算子来触发的的persist()方法或者是cache()方法,如果没有行动算子触发,然后你下面直接调用 unpersist方法来解除缓存,ok,成了无用功,代码还是会去hdfs或者其他地方拉数据,你的persist方法根本就不会起作用

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!