如何编写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
相关产品推荐
相关产品推荐

