如何通过API或其他方式程序化运行Databricks任务?支持Notebook调用
程序化运行Databricks任务的可行方案
有两种主流方式可以在Notebook中程序化触发Databricks任务,解决你当前仅能获取运行ID的问题:
1. 使用dbutils.notebook.run直接调用Notebook任务
如果目标任务本身是Notebook,可直接用Databricks内置的dbutils工具触发运行,支持传递参数、设置超时时间,还能获取任务输出。
示例代码:
# 调用指定路径的Notebook,设置30分钟超时,传递自定义参数 notebook_output = dbutils.notebook.run( path="/Workspace/Users/xxx@example.com/target_notebook", timeout_seconds=1800, arguments={"param1": "value1", "param2": 123} ) # 打印任务执行后的输出内容 print(notebook_output)
2. 通过Databricks Jobs API触发任意类型任务
如果需要触发Spark作业、Python脚本、Delta Live Table流水线等非Notebook任务,或者需要更灵活的任务控制,可使用Databricks Jobs API实现。
实现步骤:
- 先在Databricks控制台生成个人访问令牌(PAT),权限需包含
jobs.run - 在Notebook中用
requests库发送POST请求触发任务
示例代码:
import requests # 配置Databricks工作区信息 databricks_instance = "https://<你的Databricks工作区URL>" pat_token = "<你的个人访问令牌>" job_id = 123 # 要触发的目标任务ID # 构造API请求头与参数 headers = { "Authorization": f"Bearer {pat_token}", "Content-Type": "application/json" } payload = { "job_id": job_id, # 可选:传递任务参数(根据任务类型调整参数字段) "notebook_params": {"param1": "value1"} # 若为Spark作业,替换为"spark_submit_params": ["--class", "com.example.MyApp"] } # 发送触发请求 response = requests.post( f"{databricks_instance}/api/2.1/jobs/run-now", headers=headers, json=payload ) # 解析返回的运行信息 run_info = response.json() print(f"触发的任务运行ID: {run_info['run_id']}") print(f"当前任务状态: {run_info['state']['life_cycle_state']}")
扩展:查询任务运行结果
若需后续获取任务最终状态或结果,可调用jobs/get-run API:
run_id = run_info["run_id"] response = requests.get( f"{databricks_instance}/api/2.1/jobs/get-run", headers=headers, params={"run_id": run_id} ) run_details = response.json() print(f"任务最终状态: {run_details['state']['result_state']}")
两种方式对比
dbutils.notebook.run:操作简单,无需额外配置令牌,仅支持Notebook任务,调用期间当前Notebook会阻塞直到任务完成- Jobs API:支持所有任务类型,可异步触发任务(不阻塞当前Notebook),但需要配置令牌,权限管理更严格
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

