挂载Azure存储后在Databricks中使用os函数访问文件报错求助
问题解决:Azure Databricks中os/pandas访问挂载存储文件报错
核心原因
Databricks挂载路径(如/mnt/2023-project/...)属于DBFS(Databricks文件系统)路径,而os.listdir、pandas.read_excel等工具仅适配本地节点文件系统,无法直接识别DBFS路径,因此会报文件不存在错误。dbutils.fs.ls可正常工作是因为它是Databricks专为DBFS设计的操作工具。
解决方案
方案1:使用DBFS本地映射路径
Databricks默认将DBFS根目录映射到本地节点的/dbfs路径,在原挂载路径前添加/dbfs即可让本地工具识别文件:
- 查看文件列表:
os.listdir("/dbfs/mnt/2023-project/dashboard/ext") - 读取Excel文件:
import pandas as pd df = pd.read_excel("/dbfs/mnt/2023-project/dashboard/ext/Marks.xlsx")
方案2:迁移至Databricks原生API(推荐)
若代码量允许,建议逐步替换为Databricks/Spark原生工具,避免依赖本地文件系统:
- 读取Excel需先安装Spark Excel数据源库,再执行读取:
# 安装依赖库 %pip install spark-excel # 读取Excel文件 df = spark.read.format("com.crealytics.spark.excel") \ .option("header", "true") \ .load("/mnt/2023-project/dashboard/ext/Marks.xlsx")
- 文件列举仍使用
dbutils.fs.ls("/mnt/2023-project/dashboard/ext")
方案3:复制文件至本地临时目录
若必须使用本地工具,可先将DBFS文件复制到节点临时目录(如/tmp)再操作:
# 复制文件到本地临时目录 dbutils.fs.cp("/mnt/2023-project/dashboard/ext/Marks.xlsx", "file:/tmp/Marks.xlsx") # 用pandas读取本地文件 import pandas as pd df = pd.read_excel("/tmp/Marks.xlsx") # 操作完成后删除临时文件(可选) import os os.remove("/tmp/Marks.xlsx")
注意事项
- 当前挂载配置使用凭据传递(CustomAccessToken),上述方案均无需修改挂载配置,可直接使用。
/dbfs映射仅在Driver节点生效,若代码运行在集群Worker节点(如UDF),无法依赖该映射,此时优先选择方案2。
内容的提问来源于stack exchange,提问作者Vishnu Suresh
相关产品推荐
相关产品推荐

