Spark 缓存(Caching)

Spark 缓存机制详解

1. 缓存的核心作用
  • 加速计算:通过将重复使用的数据集存储在内存或磁盘,避免重复计算
  • 优化迭代算法:适用于机器学习训练、图计算等需要多次访问同一数据集的场景
  • 减少I/O开销:对于频繁访问的外部数据源,缓存后可降低读取成本
2. 持久化级别对比
级别 存储方式 序列化 适用场景
MEMORY_ONLY 仅内存 内存充足的小数据集
MEMORY_AND_DISK 内存+磁盘溢出 内存受限的较大数据集
MEMORY_ONLY_SER 内存(序列化存储) 内存优化场景
DISK_ONLY 仅磁盘 超大数据集
3. 代码实现示例
python 复制代码
from pyspark import StorageLevel

# 创建DataFrame
df = spark.read.parquet("hdfs://data/large_dataset")

# 缓存方式一(默认MEMORY_AND_DISK)
df.cache().count()  # 立即触发缓存

# 缓存方式二(指定存储级别)
df.persist(StorageLevel.MEMORY_ONLY_SER)

# 释放缓存
df.unpersist()
4. 使用场景判断

✅ 推荐缓存:

  • 循环使用的中间结果(迭代算法)
  • 被多次访问的广播连接表
  • 需要快速访问的预处理数据

❌ 避免缓存:

  • 仅单次使用的数据集
  • 大于集群可用内存50%的数据量
  • 频繁更新的动态数据
5. 性能优化技巧
  • 缓存前使用.filter().select()精简数据

  • 对宽表优先使用序列化存储(节省30%-50%内存)

  • 监控存储管理器:

    python 复制代码
    print(spark.sparkContext.uiWebUrl)  # 查看Storage选项卡
  • 配合checkpoint使用:切断RDD血缘关系,避免堆栈溢出

6. 缓存失效场景
  • JVM内存不足时自动逐出
  • 节点故障导致分区丢失
  • 调用unpersist()主动释放
  • 应用结束时自动清除
7. 高级配置参数
properties 复制代码
spark.storage.memoryFraction=0.6  # 内存分配比例
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.memory.offHeap.enabled=true  # 启用堆外内存
spark.memory.offHeap.size=2g

通过合理使用缓存,典型场景可提升作业性能3-10倍。建议结合Spark UI监控缓存命中率和内存使用情况,动态调整存储策略。

相关推荐
FII工业富联科技服务5 小时前
Omniverse + Isaac Teleop + 合成数据:工业富联机器人大脑训练+执行落地闭环拆解
大数据·人工智能·深度学习·机器学习·机器人·制造·具身智能
airank7 小时前
2026年GEO服务商选型指南:系统梳理服务商分类框架、主流服务商能力横评、企业级选型六大维度及避坑要点,帮助企业在AI搜索时代做出科学决策。
大数据·人工智能·数据分析·aigc
Delite8027 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
袋鼠云数栈8 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛139246256738 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
大大大大晴天8 小时前
大数据数据治理到底治理什么:从“数据可用”到“数据可信”
大数据
ACP广源盛139246256738 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
策案案案10 小时前
YOLO: 将AI Agents嵌入到IntelliJ IDEA
java·大数据·人工智能·笔记·yolo·microsoft·intellij-idea
一支标10 小时前
【手机+电脑】通达信《K策王》策略战法K策王技术副图指标使用说明
大数据·智能手机·电脑
坐吃山猪11 小时前
【多线程】Lock与Condition
大数据·数据库