Databricks如何将dbutils.widgets获取的参数传递给其他Notebook
Databricks Notebook间字符串参数传递实现方案
你在XYZ Notebook中通过下拉控件拿到的user值本身就是字符串类型,直接通过Databricks内置的Notebook调用能力传参即可,不需要额外做类型转换,具体实现分两步:
1. XYZ Notebook侧调用传参
保留你原有的下拉控件代码,追加Notebook调用逻辑,把获取到的用户值放入入参映射中:
// 原有下拉控件逻辑 dbutils.widgets.dropdown("user", "user1", Seq("user1", "user2"), "User Name") val user = dbutils.widgets.get("user") // 调用名为ABC的Notebook并传参 dbutils.notebook.run( "/你的工作区路径/ABC", // 替换为ABC Notebook在工作区的实际绝对路径 300, // 调用超时时间,单位为秒,可根据任务时长调整,设为0代表无超时 Map("abc_user_param" -> user) // 传参键值对,key为ABC侧约定的接收参数名,value为要传的用户字符串 )
2. ABC Notebook侧参数接收
在ABC Notebook的开头添加参数接收逻辑,和你定义下拉控件的语法一致,用文本控件接收传入的字符串即可:
// 定义入参控件,参数名和XYZ侧传参的key完全一致 dbutils.widgets.text("abc_user_param", "", "接收外部传入的用户名") // 拿到传入的用户值,类型为String,可直接用于后续业务逻辑 val inputUser = dbutils.widgets.get("abc_user_param")
注意事项
- 调用Notebook时第一个参数必须填ABC的工作区绝对路径,仅填Notebook名称会触发资源找不到的报错
- 传参Map的key和ABC侧定义的widget名称大小写完全敏感,必须保持一致,否则ABC会读取到控件设置的默认空值
- 如果你不需要等待ABC Notebook执行完成再继续XYZ的后续逻辑,可以替换为异步提交的Notebook运行接口,常规场景用同步的
dbutils.notebook.run即可满足需求
内容的提问来源于stack exchange,提问作者user3418170
相关产品推荐
相关产品推荐

