cache,persist

将数据缓存到内存,第一次触发 Action,才会将数据放入内存,以后在触发 Action,可以复用前
面内存中缓存的数据,可以提升技术效率
cache 和 persist 的使用场景:一个 application 多次触发 Action,为了复用前面 RDD 的数据,避免
反复读取 HDFS(数据源)中的数据和重复计算,可以将数据缓存到内存或磁盘【executor 所在的磁
盘】,第一次触发 action 才放入到内存或磁盘,以后会缓存的 RDD 进行操作可以复用缓存的数据。
一个 RDD 多次触发 Action 缓存才有意义,如果将数据缓存到内存,内存不够,以分区位单位,
只缓存部分分区的数据,其他没有缓存的去数据源头或者到上游Shuffle Write到本地磁盘处去拉取数据。cache 底层调用 persist,可以指定更加丰富的存储基本,支持多种 StageLevel,
可以将数据序列化,默认放入内存使用的是 java 对象存储,但是占用空间大,优点速度快,也可以使
用其他的序列化方式。
cache 和 persist 方法,严格来说,不是 Transformation,应为没有生成新的 RDD,只是标记当前
rdd 要 cache 或 persist。下面是cache的源码部分。

persisit解决了cache只能缓存结果到内存的毛病,对中间计算结果的保存有更加灵活的处理方式

persist的存储级别

https://blog.csdn.net/qq_20641565/article/details/76216417?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1

也可以使用unpersist释放cache的内存或磁盘,参数为true或者false,false是指同步阻塞,要等内存或者磁盘的数据清掉才调用函数,true是异步阻塞,相同开一个线程

posted @ 2022-03-28 21:02  习惯了蓝  阅读(204)  评论(0)    收藏  举报