如何用Scala通过Widgets实现Databricks Notebook1调用Notebook2
在Databricks中用Scala创建Widget并跨Notebook调用
一、Scala创建Widget
用Scala操作Databricks Widget的核心是databricks.widgets对象,支持多种常用类型,操作逻辑和Python一致,以下是具体实现:
1. 创建不同类型的Widget
- 文本输入框:用于单行文本输入
// 创建文本Widget,参数依次为:名称、默认值、显示标签 databricks.widgets.text("input_text", "default_val", "文本输入框")
- 下拉选择框:提供预设选项供选择
// 创建下拉Widget,参数依次为:名称、默认选中值、选项映射(显示文本->实际值)、显示标签 databricks.widgets.dropdown("input_dropdown", "opt1", Map("选项1" -> "opt1", "选项2" -> "opt2"), "下拉选择框")
- 密码输入框:输入内容会被隐藏
databricks.widgets.password("input_pwd", "", "密码输入框")
- 多选框:支持多选,返回值为逗号分隔的字符串
databricks.widgets.multiselect("input_multi", "optA", Map("选项A" -> "optA", "选项B" -> "optB"), "多选框")
2. 获取Widget的值
创建后通过get方法读取对应Widget的内容:
val textVal = databricks.widgets.get("input_text") val dropdownVal = databricks.widgets.get("input_dropdown") println(s"文本输入值:$textVal") println(s"下拉选择值:$dropdownVal")
3. 删除Widget
支持单个删除或清空当前Notebook所有Widget:
// 删除指定Widget databricks.widgets.remove("input_text") // 删除当前Notebook全部Widget databricks.widgets.removeAll()
二、从Notebook1运行Notebook2
使用dbutils.notebook.run方法实现跨Notebook调用,支持传递参数、设置超时时间,结合Widget的场景如下:
1. 基础调用(无参数)
在Notebook1(Scala环境)中直接运行Notebook2:
// 替换为你的Notebook2完整Workspace路径,超时时间单位为秒 val notebook2Path = "/Workspace/Users/your-email@xxx.com/Notebook2" val runResult = dbutils.notebook.run(notebook2Path, 300) println(s"Notebook2运行结果:$runResult")
2. 传递Widget值给Notebook2
如果需要将Notebook1的Widget值传递给Notebook2,可通过参数映射实现:
Notebook1代码(传参)
// 获取当前Notebook的Widget值 val inputVal = databricks.widgets.get("input_text") // 定义要传递的参数 val params = Map("trans_param" -> inputVal) // 调用Notebook2并传入参数 val notebook2Path = "/Workspace/Users/your-email@xxx.com/Notebook2" val runResult = dbutils.notebook.run(notebook2Path, 300, params)
Notebook2代码(接收参数)
在Notebook2中可直接读取传递的参数,也可绑定到Widget方便手动测试:
// 方式1:直接读取参数 val receivedVal = dbutils.widgets.get("trans_param") println(s"从Notebook1接收的参数:$receivedVal") // 方式2:绑定到Widget(可选) databricks.widgets.text("trans_param", receivedVal, "从Notebook1传入的参数")
3. 处理返回结果
Notebook2可通过dbutils.notebook.exit()返回字符串结果,Notebook1的runResult会接收该内容:
// Notebook2中添加返回逻辑 dbutils.notebook.exit("Notebook2执行完成,共处理50条数据")
内容的提问来源于stack exchange,提问作者Vamsi Bitra
相关产品推荐
相关产品推荐

