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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:48:01