Azure Databricks Repos读取.ipynb文件失败,求解决方案
Azure Databricks Repos无法读取.ipynb文件的解决思路
问题背景
- 在Azure Databricks Repos中读取
.ipynb文件时触发Error 95报错,但xlsx等其他格式文件可正常读取 - 已尝试的排查动作:
- 带/不带
.ipynb扩展名指定文件路径 - 用
chmod修改文件权限 - 将文件复制到
tmp/目录后尝试读取 - 使用
io、pathlib库执行读取操作 - 将文件从Repos复制到DBFS后读取
- 带/不带
- 推测核心原因是Azure Databricks对笔记本文件的安全限制,拦截了直接文件IO读取操作
解决思路
1. 通过Databricks Workspace API读取笔记本内容
Azure Databricks将Repos中的.ipynb文件视为Workspace级别的笔记本资源,而非普通文本文件,直接文件IO会被拦截。可以用官方SDK调用API获取内容:
from databricks.sdk import WorkspaceClient import json # 替换为你的Repos中.ipynb文件的完整Workspace路径 notebook_path = "/Repos/your_username/your_repo_name/target_notebook.ipynb" # 初始化Workspace客户端 w = WorkspaceClient() # 以源码格式下载笔记本内容 notebook_content = w.workspace.download(notebook_path, format="SOURCE") # 解析为JSON格式(.ipynb本质是JSON结构) notebook_json = json.loads(notebook_content)
2. 重命名文件绕过笔记本格式拦截
将.ipynb文件临时重命名为非笔记本后缀(比如.ipynb.txt),让平台将其识别为普通文本文件,再进行读取:
# 先在Repos界面手动将target_notebook.ipynb重命名为target_notebook.ipynb.txt with open("/dbfs/Repos/your_username/your_repo_name/target_notebook.ipynb.txt", "r") as f: raw_content = f.read() # 读取后还原为.ipynb的JSON结构 notebook_json = json.loads(raw_content)
3. 用Databricks CLI导出后读取
通过CLI将Repos中的笔记本导出到DBFS或本地,再读取导出后的文件:
# 先配置Databricks CLI(需提前安装并通过token认证) databricks configure --token # 将Repos中的笔记本导出到DBFS指定路径 databricks workspace export /Repos/your_username/your_repo_name/target_notebook.ipynb /dbfs/tmp/exported_notebook.ipynb
在Notebook中读取导出的文件:
with open("/dbfs/tmp/exported_notebook.ipynb", "r") as f: content = f.read()
4. 检查Repos与Workspace权限
- 确认当前用户对目标Repos仓库拥有
REPO_READ权限(在Databricks控制台的Repos权限设置中查看) - 如果是关联的外部Git仓库,确认Git令牌拥有仓库读取权限,且Databricks已完成仓库同步
内容的提问来源于stack exchange,提问作者Antônio Farias
相关产品推荐
相关产品推荐

