Databricks Notebook传参及dbutils.widgets.get获取参数报错问题咨询
报错根因
dbutils.widgets.get() 只能读取预先在目标Notebook中显式定义过的Widget参数,直接通过API传递未定义的参数就会触发InputWidgetNotDefined错误,你之前尝试用notebook_params仍报错,核心原因就是缺少Widget定义步骤。
完整解决步骤
第一步:在被触发的目标Databricks Notebook开头,先定义对应名称的Widget
# 定义需要接收的参数,第二个参数为默认值,无默认值可传空字符串 dbutils.widgets.text("param1", "") dbutils.widgets.text("param2", "")如果是下拉选择、复选框等类型参数,可以用
dbutils.widgets.dropdown()、dbutils.widgets.multiselect()等方法定义,保证参数名和API传递的完全一致,大小写敏感。第二步:修正Jobs API的传参格式
调用jobs/run-now接口触发已有Job运行时,运行时参数直接用notebook_params字段传递即可,不需要嵌套在notebook_task下,正确请求代码如下:import requests import json TOKEN = "xxxxxxxxxxxxxxxxxxxx" headers = {"Authorization": "Bearer %s" % TOKEN} data = { "job_id": xx, "notebook_params": { "param1":"key1", "param2": "key2" } } resp = requests.post( "https://xxxxxx.cloud.databricks.com/api/2.0/jobs/run-now", headers=headers, json=data )第三步:验证参数读取
完成Widget定义后再执行参数获取逻辑即可正常拿到值:param1_val = dbutils.widgets.get("param1") param2_val = dbutils.widgets.get("param2")
额外注意事项
- 如果你不需要在Notebook界面显示Widget组件,只需要静默接收参数,可以在定义完所有Widget后加
dbutils.widgets.removeAll()清理显示,不会影响已经读取到的参数值 - 如果你是创建新的一次性运行任务(不是触发已有Job),才需要在请求体中配置
notebook_task字段定义任务信息和参数
内容的提问来源于stack exchange,提问作者user8155017
相关产品推荐
相关产品推荐

