Databricks中使用%run相对路径调用父目录笔记本的路径问题咨询
解决Databricks %run相对路径前缀问题的方法
方法1:用变量替换构造正确的绝对路径(推荐)
利用Databricks魔法命令支持变量替换的特性,先获取并修正当前笔记本的父目录路径,再用%run执行目标笔记本:
# 获取当前笔记本的原始路径 current_notebook_path = dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get() # 替换路径前缀,转换为Workspace开头的正确路径 corrected_parent_path = "/Workspace/Repos" + current_notebook_path.split("/Repos")[1].rsplit("/", 1)[0]
然后执行%run命令:
%run "$corrected_parent_path/notebook_name.py"
这个方法既保留了相对路径的灵活性(不需要硬编码完整路径),又能正确识别Workspace下的Repos目录,同时可以导入目标笔记本的变量、函数到当前作用域。
方法2:将目标笔记本作为Python模块导入
如果目标笔记本是.py格式,可以通过添加路径到sys.path的方式直接导入,替代%run:
import sys from pathlib import Path # 获取并修正当前笔记本路径 current_path = dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get() corrected_path = current_path.replace("/Repos", "/Workspace/Repos", 1) # 获取父目录的路径 parent_dir = str(Path(corrected_path).parent) # 将父目录添加到Python模块搜索路径 sys.path.append(parent_dir) # 导入目标笔记本的内容 import notebook_name
导入后,即可直接使用目标笔记本中定义的变量、函数,比如notebook_name.my_function()。
方法3:手动指定带Workspace前缀的路径
如果仓库结构稳定,可以直接使用基于/Workspace/Repos的完整路径:
假设当前笔记本路径为/Workspace/Repos/my_org/my_repo/sub_dir/current_notebook.py,目标笔记本在父目录/Workspace/Repos/my_org/my_repo/下,那么可以写:
%run "/Workspace/Repos/my_org/my_repo/notebook_name.py"
内容的提问来源于stack exchange,提问作者Andrew LaPrise
相关产品推荐
相关产品推荐

