Spark缓存--persist方法

1. 功能本质

persist:这是一个通用的持久化 方法,能够指定多种不同的存储级别。存储级别决定了数据的存储位置(如内存、磁盘)以及存储形式(如是否序列化)。

2. 存储级别指定

persist:可以通过传入 StorageLevel 参数来指定不同的持久化级别。常见的持久化级别有:

MEMORY_ONLY:将 RDD 以 Java 对象的形式存储在 JVM 的内存中。若内存不足,部分分区将不会被缓存,需要时会重新计算。

MEMORY_AND_DISK:优先把 RDD 以 Java 对象的形式存储在 JVM 的内存中。若内存不足,会把多余的分区存储到磁盘上。

DISK_ONLY:将 RDD 的数据存储在磁盘上。

MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。

MEMORY_AND_DISK_SER:优先将 RDD 以序列化的 Java 对象形式存储在内存中,内存不足时存储到磁盘上。

cache:不能指定存储级别,它固定使用 MEMORY_ONLY 存储级别。

3.persist的示例

下面我们以DISK_ONLY为例,改写上面的程序,验证它的持久化效果。具体要改动的地方有两个: 指定持久化地址; 把cache改成persist;

conf.set("spark.local.dir", "/path/to/your/local/dir")

sc = SparkContext(conf)

val cachedRDD = largeRDD.map(complexTransformation).persist(StorageLevel.MEMORY_ONLY)

4. persist() 的核心优势

  1. 灵活性:可根据数据大小、集群资源选择最优存储策略。

  2. 性能优化

    • 内存充足时用 MEMORY_ONLY 避免磁盘 IO。

    • 内存不足时用 MEMORY_AND_DISK 避免频繁重计算。

  3. 资源平衡 :通过序列化(如 MEMORY_ONLY_SER)减少内存占用,降低 OOM 风险。


5. 何时使用 persist()

适用场景
  • 迭代算法:如机器学习中的梯度下降、图计算的 PageRank。

  • 多阶段计算:同一数据集被多次用于不同操作(如过滤、聚合、JOIN)。

  • 交互式分析:在 Spark Shell 或 Notebook 中多次查询同一数据集。

不适用场景
  • 数据仅使用一次:缓存反而浪费资源。

  • 存储成本高于计算成本:如数据极大且后续操作简单。

相关推荐
来旺1 小时前
互联网大厂Java面试全解析及三轮问答专项
java·数据库·spring boot·安全·缓存·微服务·面试
wudl55661 小时前
flink sql 所有函数详细用例
大数据·sql·flink
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 HTTP 缓存机制 笔记29
spring boot·笔记·缓存
cr7xin2 小时前
基于Session和Redis实现短信验证码登录
数据库·redis·缓存
luoganttcc2 小时前
是凯恩斯主义主导 西方的经济决策吗
大数据·人工智能·金融·哲学
武子康2 小时前
大数据-130 - Flink CEP 详解 - 捕获超时事件提取全解析:从原理到完整实战代码教程 恶意登录案例实现
大数据·后端·flink
分布式存储与RustFS2 小时前
存算一体架构的先行者:RustFS在异构计算环境下的探索与实践
大数据·人工智能·物联网·云原生·对象存储·minio·rustfs
wudl55668 小时前
Flink 1.20 flink-config.yml 配置详解
大数据·flink
华东数交8 小时前
企业与国有数据资产:入表全流程管理及资产化闭环理论解析
大数据·人工智能
B站_计算机毕业设计之家13 小时前
计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
大数据·爬虫·python·机器学习·信息可视化·课程设计·农业