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

Databricks Notebook代码报FileNotFoundError,原可行代码失效求因

代码在Databricks Notebook中失效的原因分析

问题场景

4年前可正常运行的Databricks Python代码,现在执行时抛出FileNotFoundError,报错提示找不到/dbfs/FileStore/NJ/file1.txt,且已确认目标目录存在。

原代码:

%python
import pandas as pd
from io import StringIO

data = """
CODE,L,PS
5d8A,N,P60490
5d8b,H,P80377
5d8C,O,P60491
"""

df = pd.read_csv(StringIO(data), sep=',')
#print(df)
df.to_csv('/dbfs/FileStore/NJ/file1.txt')

pandas_df = pd.read_csv("/dbfs/FileStore/NJ/file1.txt", header='infer') 
print(pandas_df)

报错信息:

FileNotFoundError: [Errno 2] No such file or directory: '/dbfs/FileStore/NJ/file1.txt'

核心失效原因

1. DBFS FUSE挂载默认禁用

早期Databricks集群默认通过FUSE将DBFS挂载到节点本地的/dbfs路径,因此可以直接用本地文件路径方式读写。但后续版本(尤其是Serverless Runtime集群)默认关闭了FUSE挂载,此时直接访问/dbfs路径会找不到对应的文件系统。

2. 权限模型变更

即使目录存在,当前Notebook的执行身份(比如Workspace用户权限、集群IAM角色)可能没有对/FileStore/NJ路径的读写权限。Databricks后续加强了Workspace和DBFS的权限控制,原有的权限配置可能不再适用。

3. 文件同步延迟

df.to_csv通过本地路径写入时,虽然代码执行完成,但DBFS的文件同步可能存在异步延迟,导致立刻读取时文件还未完全同步到存储层,出现文件不存在的错误。

4. 大小写敏感问题

DBFS底层存储(如S3、ADLS)是大小写敏感的,若实际目录/文件名的大小写与代码中不一致(比如实际是/FileStore/nj/而代码写的是/FileStore/NJ/),也会触发找不到文件的错误。

验证与修复方案

验证FUSE挂载状态

在Notebook中执行以下命令,若报错则说明FUSE未挂载:

!ls /dbfs/FileStore/NJ

修复后的示例代码

改用Databricks原生的dbutils.fs工具或dbfs:/协议路径操作文件:

import pandas as pd
from io import StringIO

data = """
CODE,L,PS
5d8A,N,P60490
5d8b,H,P80377
5d8C,O,P60491
"""

df = pd.read_csv(StringIO(data), sep=',')
# 使用dbutils写入DBFS,支持覆盖已有文件
dbutils.fs.put("/FileStore/NJ/file1.txt", df.to_csv(index=False), overwrite=True)

# 用dbfs:/协议路径读取文件,兼容FUSE未挂载的场景
pandas_df = pd.read_csv("dbfs:/FileStore/NJ/file1.txt", header='infer') 
print(pandas_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:32:41