使用dbutils.notebook.run执行Databricks Notebook报错,%run可正常运行求原因
问题原因及解决方案
核心差异:路径解析规则不同
%run和dbutils.notebook.run对路径的解析逻辑完全不一样:
%run的相对路径是基于当前Notebook所在的位置来解析的,比如你在/Users/xxx@xxx.com/folder/main里用%run "../sub/mynotebook",会自动定位到对应层级的目标Notebook。dbutils.notebook.run的相对路径是基于执行身份的个人Workspace根目录(即/Users/你的邮箱/)来解析的。你写dbutils.notebook.run("mynotebook", 3600),系统会去查找/Users/xxxxxxxx@xxxxx.co.uk/mynotebook,但实际你的Notebook在/path/mynotebook或者/Users/xxxxxxxx@xxxxx.co.uk/path/mynotebook,自然找不到,触发路径不存在的错误。
另外错误信息里显示的路径是/Users/xxxxxxxx@xxxxx.co.uk/path/mynotebooks(多了个s),也有可能是你代码里的Notebook名字写错了,需要核对。
执行身份的细微区别
%run是在当前Notebook的交互式会话中执行,完全复用当前用户的权限和上下文;而dbutils.notebook.run本质是启动一个独立的作业执行流程——即使在交互式Notebook里运行,它的路径解析逻辑依然遵循作业的规则,而非交互式会话的相对路径规则。如果后续你把这段代码做成调度作业,还需要确保作业执行身份有访问目标Notebook的权限,但你当前的问题核心还是路径解析错误。
解决方案
- 使用完整绝对路径:把
dbutils.notebook.run的路径参数改成目标Notebook的绝对路径,比如:
或者如果Notebook在你的个人目录下,写全路径:dbutils.notebook.run("/path/mynotebook", 3600)dbutils.notebook.run("/Users/xxxxxxxx@xxxxx.co.uk/path/mynotebook", 3600) - 核对Notebook名称:检查错误信息里的
mynotebooks是否是笔误,确保代码里的名称和实际Notebook完全一致。 - 验证权限(可选):如果改完路径还是报错,确认当前用户(或作业执行身份)对目标Notebook有可执行权限——不过你用
%run能成功,说明权限大概率没问题。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

