You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:10:20