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

Azure Databricks中PySpark调用unpersist()未清除路径缓存问题求解

解决方案

根因说明

  • 你遇到的读取不到最新数据的问题,不只是DataFrame用户缓存没清除的问题,Spark默认还会对文件数据源的路径元数据(包含文件列表、文件修改时间等信息)做自动缓存,哪怕DataFrame的缓存已经释放,元数据缓存还在的情况下依旧会读取旧的文件数据。
  • data_frame.unpersist()本身是原地修改操作,不需要重新赋值给原变量,两种写法没有本质差异,你观察到的差异是元数据缓存未清理导致的假象。

分步操作指南

1. 彻底清除指定DataFrame的缓存

添加blocking=True参数保证缓存同步清理完成,避免异步清理的延迟问题:

# 先校验当前DataFrame是否处于缓存状态
print(data_frame.is_cached)
# 同步清除缓存,等待清理完成后再返回
data_frame.unpersist(blocking=True)

该操作只会清除当前DataFrame的缓存,不会影响集群内其他作业的缓存数据。

2. 单独清理指定路径的元数据缓存

使用REFRESH命令清理目标路径的元数据缓存,不会影响其他路径的缓存:

# 清理指定路径的文件元数据缓存
spark.sql("REFRESH `/mnt/path/`")

执行完该命令后再重新执行读取CSV的逻辑,就能拿到最新的底层数据。

长效规避方案

如果你的业务场景需要频繁修改路径下的文件后重新读取,可以在当前笔记本会话中添加如下配置,避免后续再出现同类问题:

# 关闭当前会话的文件数据源元数据自动缓存
spark.conf.set("spark.sql.filesourceTableRelationCacheSize", 0)
# 读取时每次都重新扫描路径下的最新文件
spark.conf.set("spark.sql.files.ignoreFileCache", "true")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:39:03