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

如何编写Flask API触发Azure Databricks Notebook(本地VS Code运行,缺Org_id)

手把手解决:用Flask API触发Azure Databricks Notebook

别担心,我一步步帮你搞定——先把缺失的Org_id和Notebook路径找出来,再写能直接运行的Flask代码。

一、先补全两个关键参数

1. 找Org_id超简单

登录你的Azure Databricks workspace,直接看浏览器地址栏的URL就行!格式大概是这样的:
https://adb-xxxxxx.xx.azuredatabricks.net/?o=1234567890123456
这里o=后面的一串数字就是你的Org_id,直接复制下来就行。

2. 获取Notebook的完整路径

打开Databricks workspace,找到你要触发的Notebook,右键点它,选「Copy path」——一秒就能拿到完整路径,比如/Users/your_email@company.com/MyNotebooks/ETL_Pipeline。要是没找到这个选项,就看Notebook顶部的导航栏,把每一级路径拼起来,记得开头要加/。

二、编写Flask API代码

首先先装依赖,打开终端跑这个命令:

pip install flask requests

然后把下面的代码复制到VS Code里,记得把配置参数换成你自己的:

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

# 这里替换成你自己的Databricks参数
DATABRICKS_HOST = "https://adb-xxxxxx.xx.azuredatabricks.net"  # 你的主机URL
DATABRICKS_TOKEN = "dapi-xxxxxxxxxxxxxxxxxxxxxxxx"  # 你的Token_id
CLUSTER_ID = "0123-456789-abc123de"  # 你的集群ID
TARGET_NOTEBOOK_PATH = "/Users/your_email@company.com/MyNotebooks/ETL_Pipeline"  # 刚才复制的Notebook路径

@app.route('/trigger-notebook', methods=['POST'])
def trigger_databricks_notebook():
    try:
        # 构造Databricks Jobs API的请求地址
        api_url = f"{DATABRICKS_HOST}/api/2.0/jobs/runs/submit"
        
        # 设置请求头,带上Token认证
        headers = {
            "Authorization": f"Bearer {DATABRICKS_TOKEN}",
            "Content-Type": "application/json"
        }
        
        # 构造请求体,告诉Databricks要跑哪个Notebook、用哪个集群
        payload = {
            "cluster_id": CLUSTER_ID,
            "notebook_task": {
                "notebook_path": TARGET_NOTEBOOK_PATH
                # 要是需要给Notebook传参数,加这行:
                # "base_parameters": {"param1": "value1", "param2": "value2"}
            }
        }
        
        # 发送请求给Databricks
        response = requests.post(api_url, json=payload, headers=headers)
        response.raise_for_status()  # 有HTTP错误直接抛出来
        
        # 返回成功结果,包含任务的run_id等信息
        return jsonify({
            "status": "success",
            "message": "Notebook触发成功!",
            "run_details": response.json()
        }), 200
    
    except requests.exceptions.RequestException as e:
        # 处理API请求失败的情况
        error_details = e.response.json() if e.response else {}
        return jsonify({
            "status": "error",
            "message": f"触发Notebook失败:{str(e)}",
            "details": error_details
        }), 500
    except Exception as e:
        # 处理其他意外错误
        return jsonify({
            "status": "error",
            "message": f"发生意外错误:{str(e)}"
        }), 500

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

三、测试你的API

在VS Code里运行这个Flask应用,然后用Postman或者curl发个POST请求到http://localhost:5000/trigger-notebook就行。比如用curl的话:

curl -X POST http://localhost:5000/trigger-notebook

要是成功,你会收到带run_id的响应,同时去Databricks的「Jobs -> Runs」里就能看到这个正在跑的任务啦。

几个要注意的点

  • 确保你的Databricks Token有足够权限,比如能创建任务、使用集群,不然会返回权限错误。
  • 要触发的集群得是Running状态,要是集群没开,API会报错。要是不想手动开集群,也可以在payload里配置new_cluster来动态创建,但频繁创建销毁集群不太划算。
  • 要是需要给Notebook传参数,就在notebook_task里加base_parameters字段,Notebook里用dbutils.widgets.get("param1")就能拿到参数值。

内容的提问来源于stack exchange,提问作者Revanth tirumala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:47:49