Databricks中不挂载DBFS直接通过abfss路径使用open()方法读取JSON文件失败的替代方案咨询
解决方法:用Databricks支持的API替代open()访问abfss路径
你遇到的问题根源很明确:Python内置的open()函数是用于操作本地文件系统的,它无法识别Databricks的abfss分布式存储协议,所以直接传入abfss路径会触发找不到文件的错误。既然你已经完成了服务主体的权限配置,下面给你几个实用的替代方案:
1. 使用Databricks原生的dbutils.fs工具读取
dbutils.fs是Databricks专为分布式存储设计的工具,完美支持abfss协议,适合读取小体积的JSON文件:
# 替换<容器名>和<存储账户名>为你的实际信息 file_path = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/test.json" # 读取文件内容(默认前65536字节,若文件更大可指定字节数参数,比如head(file_path, 1000000)) file_content = dbutils.fs.head(file_path) # 转换成Python JSON对象 import json json_data = json.loads(file_content)
2. 使用Spark API读取(推荐处理大文件)
Spark原生支持abfss协议,适合处理大体积的JSON文件,还能直接转换成DataFrame进行后续分析:
file_path = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/test.json" # 读取JSON文件为Spark DataFrame df = spark.read.json(file_path) # 如果需要转换成Python原生的字典/列表格式 # 方式1:获取所有JSON字符串列表 json_str_list = df.toJSON().collect() # 方式2:将第一条记录转成字典 single_json_dict = df.first().asDict()
3. 使用Pandas读取(适合熟悉Pandas的场景)
Databricks环境中配置好服务主体后,Pandas也可以直接识别abfss路径:
import pandas as pd file_path = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/test.json" # 读取JSON文件为Pandas DataFrame pd_df = pd.read_json(file_path) # 转换成JSON格式的列表/字典 json_data = pd_df.to_dict("records")
额外检查项
- 确认你的服务主体对目标Blob容器拥有读取权限(比如Storage Blob Data Reader角色)
- 检查abfss路径的格式是否正确:
abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<文件路径>,不要遗漏容器名或存储账户名 - 确保文件确实存在于指定路径中(可以用
dbutils.fs.ls("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/")查看目录内容)
内容的提问来源于stack exchange,提问作者Deepika
相关产品推荐
相关产品推荐

