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

如何用Python调用Databricks Notebook并解决REST API请求格式错误

解决Databricks RunsApi提交任务的MALFORMED_REQUEST错误

错误核心原因

出现MALFORMED_REQUEST错误,本质是请求体里的notebook_params(或新版本的base_parameters)格式不符合要求——Databricks要求这个参数必须是键值对Map类型(对应JSON对象),而非数组、纯字符串或其他结构。

完整解决方案

1. 编写处理参数的Databricks Notebook

先在Databricks上创建一个Notebook,负责接收参数、执行字符串反转逻辑,并把结果输出给本地脚本:

# Databricks Notebook 代码
# 定义接收参数的组件
dbutils.widgets.text("input_str", "", "输入字符串")
input_str = dbutils.widgets.get("input_str")

# 执行字符串反转操作
reversed_str = input_str[::-1]

# 将结果返回给调用方,必须用dbutils.notebook.exit
dbutils.notebook.exit(reversed_str)

2. 本地Python脚本正确调用RunsApi

确保本地脚本里的参数传递是字典(对应Map类型),同时完成任务提交、状态轮询和结果获取:

# 本地Python脚本代码
from databricks_cli.sdk.api_client import ApiClient
from databricks_cli.runs.api import RunsApi
import time

# 初始化API客户端,替换成你的实例信息
api_client = ApiClient(
    host='https://<你的Databricks实例URL>',
    token='<你的个人访问令牌>'
)
runs_api = RunsApi(api_client)

# 提交Notebook任务,重点:base_parameters是字典格式
run_response = runs_api.submit_run(
    run_name="字符串反转任务",
    existing_cluster_id="<你的集群ID>",  # 也可以用new_cluster参数创建临时集群
    notebook_task={
        "notebook_path": "/Workspace/你的Notebook完整路径",
        "base_parameters": {
            "input_str": "Hello Databricks"  # 键值对Map,完全符合要求
        }
    }
)

run_id = run_response["run_id"]
print(f"任务提交成功,Run ID: {run_id}")

# 轮询等待任务结束
while True:
    run_status = runs_api.get_run(run_id)
    state = run_status["state"]["life_cycle_state"]
    if state in ["TERMINATED", "SKIPPED", "FAILED"]:
        break
    print("任务运行中...")
    time.sleep(5)

# 读取任务结果
if run_status["state"]["result_state"] == "SUCCESS":
    result = run_status["notebook_output"]["result"]
    print(f"反转结果: {result}")
else:
    print(f"任务失败,原因: {run_status['state']['state_message']}")

关键注意事项

  • 参数格式要求:base_parameters必须是字典,键对应Notebook里dbutils.widgets.text定义的参数名,值必须是字符串(Databricks仅支持字符串类型的参数传递)。
  • 集群选择:可以用现有集群(填existing_cluster_id),也可以通过new_cluster参数定义临时集群,适合一次性任务。
  • 结果传递:必须用dbutils.notebook.exit()返回结果,否则本地脚本无法获取到输出内容。
  • 权限验证:确保你的个人访问令牌拥有run_submit、run_read等必要权限。

常见问题排查

如果还是报MALFORMED_REQUEST,检查这几点:

  • 有没有把base_parameters拼写成旧版的notebook_params(新版本推荐用base_parameters)。
  • 参数值是不是全为字符串,不能传数字、布尔值等非字符串类型。
  • Notebook路径是否是Workspace里的完整路径,不能只写文件名。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:55:21