当前位置: 首页 > news >正文

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 中多次查询同一数据集。

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

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

相关文章:

  • 【C语言】文件操作(续)
  • AI原生手机:三大技术阵营的终极对决与未来展望
  • MyBatis(进阶)(xml标签)
  • 【Ubuntu】安裝向日葵远程控制
  • React Native基础环境配置
  • 【办公类-99-05】20250508 D刊物JPG合并PDF便于打印
  • CTF之常见的文件头和文件尾
  • LeetCode 3341到达最后一个房间的最少时间 I 题解
  • 前端三大件---CSS
  • CentOS7将yum源更换为阿里源
  • 数据结构*二叉树
  • 基于STM32、HAL库的FT232RL USB转UART收发器 驱动程序设计
  • 【嵌入式开发-UART】
  • Windows系统安装Cursor与远程调用本地模型QWQ32B实现AI辅助开发
  • 预训练模型实战手册:用BERT/GPT-2微调实现10倍效率提升,Hugging Face生态下的迁移学习全链路实践
  • SQL常用操作大全:复制表、跨库查询、删除重复数据
  • 【Yolo精读+实践+魔改系列】Yolov3论文超详细精讲(翻译+笔记)
  • centos搭建dokcer和vulhub
  • 何不乘东风?利用mcp实现小红书自动发布
  • 2025 后端自学UNIAPP【项目实战:旅游项目】3、API接口请求封装,封装后的简单测试以及实际使用
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神
  • 北上广深均宣布下调个人住房公积金贷款利率
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • 全国首例在沪完成,这项近视治疗手术不到10秒
  • 印巴冲突升级,巴防长称已击落5架印度战机
  • 有乘客被高铁车门夹住?铁路回应:系突感不适下车,未受伤,列车正点发车