Databricks notebook中如何在同一单元格内运行多个%run语句?
解决方案
问题原因
- 直接在单个单元格内写多个
%run语句报错:%run属于Databricks的单元格级魔法命令,单个单元格仅允许存在一个%run指令,且必须放在单元格首行,多个同类型魔法命令无法被解析器识别,因此会抛出正则匹配失败的报错。 dbutils.notebook.run方案未生效:大概率是路径填写错误、超时时间设置过短,另外该方法默认是独立运行目标笔记本,不会将目标笔记本的变量、函数等上下文导入当前笔记本,如果你需要复用目标笔记本的内容,该方案本身不符合需求。
可行方案
方案1:需要复用目标笔记本的变量/函数(上下文共享)
适用于Databricks Runtime 11.3 LTS及以上版本,效果和逐个运行%run完全一致,目标笔记本的所有内容都会导入当前上下文:
from databricks.sdk import WorkspaceClient w = WorkspaceClient() # 替换为你自己的笔记本绝对路径列表 notebook_paths = [ "/Workspace/Users/你的账号/目标笔记本1", "/Workspace/Users/你的账号/目标笔记本2", "/Workspace/Users/你的账号/目标笔记本3" ] for path in notebook_paths: # 导出笔记本内容并在当前上下文执行 exec(w.workspace.export(path).content.decode("utf-8")) print(f"已完成导入笔记本:{path}")
方案2:仅需要按顺序执行笔记本,无需共享上下文
修正你之前的dbutils.notebook.run写法,注意填写正确的绝对路径,根据实际运行时长调整超时时间:
# 替换为你自己的笔记本绝对路径列表 notebooks = [ "/Workspace/Users/你的账号/目标笔记本1", "/Workspace/Users/你的账号/目标笔记本2", "/Workspace/Users/你的账号/目标笔记本3" ] for n in notebooks: try: # 第二个参数为超时时间,单位为秒,可根据实际运行时长调整 run_result = dbutils.notebook.run(n, 300) print(f"已完成运行笔记本:{n},运行结果:{run_result}") except Exception as e: print(f"运行笔记本{n}失败,错误信息:{str(e)}")
方案3:低版本Runtime可选方案
如果你的Databricks Runtime版本低于11.3,也可以直接通过工作流创建多任务作业,将需要运行的笔记本按顺序添加为作业任务,提交作业后即可自动按顺序运行所有笔记本,无需手动逐个执行单元格。
内容的提问来源于stack exchange,提问作者Andrew Hicks
相关产品推荐
相关产品推荐

