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

Spark缓存---cache方法

在Spark 中,cache() 是用于优化计算性能的核心方法之一,但它有许多细节需要深入理解。以下是关于 cache() 的详细技术解析:

1. cache() 的本质
简化的 persist():cache() 是 persist(StorageLevel.MEMORY_ONLY) 的快捷方式,将数据以反序列化对象的形式存储在内存中。

惰性操作:调用 cache() 后,数据不会立即缓存,只有在首次触发行动操作(如 count(), show(), collect())时才会执行缓存。

存储级别:默认使用 MEMORY_ONLY,若内存不足,未缓存的分区会在后续需要时重新计算。

2. 底层工作原理
缓存过程
血缘(Lineage)记录:Spark 记录 RDD/DataFrame 的血缘关系(即生成该数据的操作步骤)。

首次计算:当首次触发行动操作时,Spark 根据血缘执行计算,并将结果按分区缓存在内存中。

后续复用:后续操作直接读取缓存数据,跳过血缘中的计算步骤。

缓存失效
手动释放:调用 unpersist() 立即释放缓存。

自动清理:Spark 根据 LRU(最近最少使用)策略自动清理缓存,当内存不足时,最早未使用的缓存分区会被移除。

3. 存储级别的关键细节
cache() 对应的 MEMORY_ONLY 存储级别特性:

特性    说明
序列化    数据以反序列化 Java 对象形式存储,读写速度快,但内存占用高。
内存溢出处理    内存不足时,直接丢弃未缓存的分区,后续需要时重新计算(不会写入磁盘)。
容错性    缓存数据丢失时(如节点故障),Spark 根据血缘重新计算。
4. 何时使用 cache()?
适用场景
重复使用:同一数据集被多次用于不同操作(如多阶段机器学习流水线)。

迭代计算:如 PageRank、梯度下降等需要多次遍历数据的算法。

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

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

内存不足:数据远大于可用内存时,MEMORY_ONLY 会导致频繁重计算,应改用 MEMORY_AND_DISK。

代码示例
// 使用 cache 的情况

    val cachedRDD = largeRDD.map(complexTransformation).cache()

   

    // 第一次触发行动算子,计算并统计时间

    val startTime3 = System.currentTimeMillis()

    val result3 = cachedRDD.collect()

    val endTime3 = System.currentTimeMillis()

    println(s"使用 cache 第一次计算耗时: ${endTime3 - startTime3} 毫秒")

    // 第二次触发行动算子,计算并统计时间

    val startTime4 = System.currentTimeMillis()

    val result4 = cachedRDD.collect()

    val endTime4 = System.currentTimeMillis()

    println(s"使用 cache 第二次计算耗时: ${endTime4 - startTime4} 毫秒")

    println(s"spark.local.dir 的值: ${conf.get("spark.local.dir")}")

    sc.stop()

相关文章:

  • 【前端】:单 HTML 去除 Word 批注
  • 【嵌入式开发-软件定时器】
  • nginx 出现大量connect reset by peer
  • 二分查找的边界问题
  • Python训练营打卡——DAY25(2025.5.14)
  • [论文阅读]Formalizing and Benchmarking Prompt Injection Attacks and Defenses
  • MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?
  • 基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)
  • 深度强化学习 | 图文详细推导软性演员-评论家SAC算法原理
  • html js 原生实现web组件、web公共组件、template模版插槽
  • Go 语言 sqlx 库使用:对 MySQL 增删改查
  • 破解商业综合体清洁管理困局:商业空间AI智能保洁管理系统全场景解决方案
  • 知识图谱重构电商搜索:下一代AI搜索引擎的底层逻辑
  • Flink CDC—实时数据集成框架
  • 【论文笔记】ViT-CoMer
  • CCF第七届AIOps国际挑战赛季军分享(RAG)
  • HTML 颜色全解析:从命名规则到 RGBA/HSL 值,附透明度设置与场景应用指南
  • 【HCIA】BFD
  • linux内核主要由哪五个模块构成?
  • 网络协议分析 实验七 FTP、HTTP、DHCP
  • 中巡组在行动丨①震慑:这些地区有官员落马
  • 全国汽车以旧换新补贴申请量突破1000万份
  • 中共中央、国务院印发《生态环境保护督察工作条例》
  • 75万采购防火墙实为299元路由器?重庆三峡学院发布终止公告:出现违法违规行为
  • 家电维修担心遇“李鬼”?上海推动“物业+专业服务”进社区
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流