【推荐】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方法根本就不会起作用
来源:oschina
链接:https://my.oschina.net/u/4424932/blog/3143103