You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark DataFrame中checkpoint(false)为何比persist()执行效率更高?

为什么非急切模式checkpoint(false)效率高于默认persist()

这是二者的存储逻辑、执行策略与测试数据集的特性共同作用的结果,核心原因有三点:

  • 触发时机与查询裁剪更高效
    非急切的checkpoint(false)不会在调用时立刻触发计算,会等到第一个Action(groupBy(Role).collect())执行时才真正触发数据落盘。此时Spark的查询优化器已经完成了列裁剪、谓词下推,仅保留符合过滤条件的行与计算需要的字段,进一步缩小了需要持久化的数据量。
  • 默认persist()的缓存开销高、易失效
    Spark无参cache()/persist()默认使用MEMORY_ONLY存储级别,存储的是未序列化的Java对象。你的数据集包含超长字符串类型的Name列,未序列化存储的内存占用极高,很容易出现Executor内存不足、部分分区缓存失败的情况。执行第二个Action(groupBy(Born).collect())时,缓存失败的分区需要重新执行上游过滤逻辑,会引入额外的重算开销。
  • Checkpoint自身的机制优势
    Checkpoint默认写入序列化后的高压缩率Parquet格式,哪怕需要写入磁盘,实际写入的数据量远小于MEMORY_ONLY存储的未序列化对象体积。同时Checkpoint完成后会彻底切断DataFrame的血缘依赖,第二个Action执行时可以直接读取Checkpoint的磁盘文件,不需要回溯上游计算逻辑,也不存在缓存失效重算的问题。

内容的提问来源于stack exchange,提问作者Mardaunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:27:03