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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:54:04