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

Azure Databricks Notebook无法获取Job API传递的参数求助

问题描述

Flask应用捕获Web表单输入值,将其作为参数触发Azure Databricks Job,尝试了两种参数传递格式:

  1. 使用notebook_params的payload:
payload = {
    'notebook_params': {
        'customer_name': customer_name
    }
}
  1. 使用notebook_task.base_parameters的payload:
payload = {
    "notebook_task": {
        "notebook_path": "/Shared/.../",
        "base_parameters": {           
            "customer_name": customer_name,
        }
    }
}

遇到的问题:

  • 创建Job时设置默认参数,传入的值无法覆盖默认值;
  • 移除Job默认参数后,传递的参数为空值;
  • Databricks Notebook中未设置默认值时,print返回空值,Notebook代码如下:
# Get the customer_name value from the parameter
dbutils.widgets.get("customer_name", "",")
customer_name = dbutils.widgets.get("customer_name")

# Use the customer_name in your notebook logic
print("Customer Name:", customer_name)

执行Job时可见运行参数,但Notebook无法正确获取,期望返回传入的customer_name=Cx4。

排查与解决步骤

1. 修正Notebook参数获取的语法错误

你的Notebook代码存在语法错误:dbutils.widgets.get("customer_name", "",")的第三个参数多了一个双引号,导致代码执行异常,无法正确读取参数。修正后的代码如下:

# 先定义widget再获取参数(带默认值)
dbutils.widgets.text("customer_name", "")
customer_name = dbutils.widgets.get("customer_name")

print("Customer Name:", customer_name)

如果不需要默认值,可简化为:

dbutils.widgets.text("customer_name")
customer_name = dbutils.widgets.get("customer_name")

print("Customer Name:", customer_name)

注意:dbutils.widgets.get需要对应已定义的widget,直接调用未定义的widget会报错,先通过dbutils.widgets.text定义参数是稳妥的做法。

2. 匹配Job API调用的参数格式

Azure Databricks不同的Job操作对应不同的参数格式,不可混用:

  • 触发已存在的Job(调用jobs/run-now API):必须使用notebook_params传递参数,覆盖Job默认值:
payload = {
    "job_id": "你的JobID",
    "notebook_params": {
        "customer_name": customer_name
    }
}
  • 创建并触发一次性Job(调用jobs/runs/submit API):使用notebook_task.base_parameters,同时确保notebook_path是完整正确的路径:
payload = {
    "run_name": "客户数据处理任务",
    "notebook_task": {
        "notebook_path": "/Shared/完整的笔记本路径",
        "base_parameters": {
            "customer_name": customer_name
        }
    },
    "new_cluster": {
        "spark_version": "13.3.x-scala2.12",
        "node_type_id": "Standard_DS3_v2",
        "num_workers": 1
    }
}

3. 确认参数名称的一致性

参数名称是大小写敏感的,请确保:

  • Flask传递的参数名customer_name,与Job默认参数名、Notebook中定义的widget名完全一致;
  • 无拼写错误(如Customer_Name和customer_name会被识别为两个不同参数)。

4. 添加调试代码验证参数接收

在Notebook中添加调试代码,打印所有widget参数,确认是否接收到值:

# 打印所有已定义的widget参数
all_widgets = dbutils.widgets.getAll()
print("所有参数:", all_widgets)

如果此处能看到customer_name的正确值,说明参数传递正常,问题出在后续业务逻辑;如果看不到,需要检查Flask的API请求是否正确发送,以及Databricks API的响应状态。

内容的提问来源于stack exchange,提问作者Tauqeer Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:42