PySpark基础入门(3):RDD持久化

编程入门 行业动态 更新时间:2024-10-23 13:23:57

PySpark基础入门(3):RDD<a href=https://www.elefans.com/category/jswz/34/1771330.html style=持久化"/>

PySpark基础入门(3):RDD持久化

RDD的持久化

RDD 的数据是过程数据,因此需要持久化存储;

RDD之间进行相互迭代的计算,新的RDD的生成代表着旧的RDD的消失;这样的特性可以最大化地利用资源,老旧地RDD可以及时地从内存中清理,从而给后续地计算腾出空间;

如下图所示:

rdd3地第一次使用是在构建rdd4的时候,构建完rdd4之后rdd3就不存在了;而第二次使用rdd3的时候,由于其已经不存在,需要根据RDD的血缘关系,从rdd重新执行,构建出来rdd3,供rdd5使用;

RDD的缓存

可以通过缓存技术,将RDD存储在内存中或者磁盘上,这样就不用重复构建rdd了;

常用的缓存API如下:

一般使用rdd.persist(StorageLevel.MEMORY_AND_DISK),优先缓存在磁盘上;

如果是内存比较小的集群,可以只缓存到磁盘上;

手动清理缓存的API:rdd.unpersist()

缓存的特点:缓存被认为是不安全的,因此保留RDD之间的血缘关系

因为缓存的数据有丢失的风险,内存中的缓存可能由于断电/空间不足被清理;磁盘上的缓存可能由于磁盘损坏丢失等等,所以需要保留血缘关系,从而避免数据丢失;

RDD的缓存是如何保存的?

采取分散存储:RDD的每个分区自行将其数据保存在其所在的Executor内存和磁盘上

RDD的CheckPoint

CheckPoint也是保存RDD的一种机制,但只支持磁盘存储;

与缓存相比,CheckPoint被认为是安全的,也不会保存RDD之间的血缘关系;

CheckPoint的存储:

集中收集存储:CheckPoint集中收集各个分区的数据存储在HDFS上;

API:

# 设置存储路径,如果是local模式,可以选用本地文件系统
# 如果是集群模式,一定要设置hdfs路径
sc.setCheckpointDir(path)
# 存储
rdd.checkpoint()
# 清除
rdd.unpersist()

缓存和CheckPoint的对比

Cache 和 CheckPoint的性能对比:

Cache性能更好, 因为是分散存储, 各个Executor并行执行, 效率高, 可以保存到内存中(占内存),更快

CheckPoint比较慢, 因为是集中存储, 涉及到网络IO, 但是存储到HDFS上更加安全(多副本)

注意:Cache 和 CheckPoint两个API都不是action类型的,如果要想正常工作,后面必须有action类型的算子;

更多推荐

PySpark基础入门(3):RDD持久化

本文发布于:2023-06-22 12:47:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/833410.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:持久   入门   基础   PySpark   RDD

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!