Azure Databricks DBFS/FileStore文件缓存问题:如何清除或禁用缓存?
解决Azure Databricks DBFS FileStore文件缓存问题
你遇到的是DBFS FUSE挂载的本地节点缓存导致旧文件内容残留的问题,以下是具体解决办法:
一、改用无缓存的读取方式
放弃使用Scala标准库的fromFile(依赖本地文件系统缓存),改用Databricks原生工具或Spark API读取:
使用dbutils.fs读取(适合小文件)
直接调用Databricks文件系统工具,绕过本地缓存:// 读取全部内容 val contents = dbutils.fs.head(filepath) // 或逐行读取后拼接 val lines = dbutils.fs.read(filepath).split("\n") val contents = lines.mkString("\n")使用Spark API读取(适合大文件)
Spark读取接口直接从DBFS拉取最新内容,无本地缓存问题:import org.apache.spark.sql.functions._ val df = spark.read.text(filepath) val contents = df.select(concat_ws("\n", collect_list("value"))).first().getString(0)
二、清除当前会话的缓存
如果已经使用标准库方法导致缓存,可通过以下方式刷新:
刷新DBFS挂载缓存
执行命令刷新所有挂载的文件系统缓存:dbutils.fs.refreshMounts()手动删除本地缓存文件
DBFS通过FUSE挂载到节点的/dbfs/路径,删除本地缓存文件后会重新拉取最新内容:import java.io.File val localPath = s"/dbfs${filepath}" // 需确保filepath以/开头,如"/FileStore/test.txt" val cacheFile = new File(localPath) if (cacheFile.exists()) cacheFile.delete() // 重新读取 val contents = scala.io.Source.fromFile(localPath).getLines.mkString("\n")
三、全局禁用DBFS缓存(长期生效)
编辑集群配置,在Spark配置中添加以下参数,集群重启后即可禁用DBFS文件缓存:
spark.databricks.dbfs.cache.enabled false
内容的提问来源于stack exchange,提问作者testbg testbg
相关产品推荐
相关产品推荐

