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

能否通过外部Java API调用Azure Databricks脚本?求按需执行方案

外部Java API调用Azure Databricks脚本的实现方式

完全可以通过外部Java API按需执行Azure Databricks脚本,核心是调用Databricks Jobs API,以下是具体实现步骤:

1. 前置准备

  • 获取Azure Databricks工作区的Workspace URL(格式如 https://<region>.azuredatabricks.net)
  • 创建具有Job执行权限的Personal Access Token (PAT)
  • 若脚本已封装为Databricks Job,记录对应的Job ID;若未封装,准备好脚本内容或笔记本路径

2. 两种实现方案

方案一:触发已存在的Databricks Job(Run Now API)

如果脚本已经配置为Databricks Job,直接调用jobs/run-now API触发执行:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class DatabricksJobTrigger {
    public static void main(String[] args) throws Exception {
        String workspaceUrl = "https://<your-region>.azuredatabricks.net";
        String token = "dapi-<your-personal-access-token>";
        long jobId = 12345; // 替换为你的Job ID

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(workspaceUrl + "/api/2.1/jobs/run-now"))
                .header("Authorization", "Bearer " + token)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString("{\"job_id\": " + jobId + "}"))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("执行响应: " + response.body());
    }
}

方案二:直接提交脚本执行(Run Submit API)

如果需要动态指定脚本内容或参数,调用jobs/runs/submit API直接提交任务:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class DatabricksScriptSubmit {
    public static void main(String[] args) throws Exception {
        String workspaceUrl = "https://<your-region>.azuredatabricks.net";
        String token = "dapi-<your-personal-access-token>";

        // 构建请求体,指定脚本类型、内容及集群配置
        String requestBody = """
                {
                    "run_name": "按需执行脚本",
                    "new_cluster": {
                        "spark_version": "13.3.x-scala2.12",
                        "node_type_id": "Standard_DS3_v2",
                        "num_workers": 1
                    },
                    "spark_python_task": {
                        "python_code": "print('Hello from external Java API')"
                    }
                }
                """;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(workspaceUrl + "/api/2.1/jobs/runs/submit"))
                .header("Authorization", "Bearer " + token)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("提交响应: " + response.body());
    }
}

3. 关键注意事项

  • 确保Java程序所在网络能访问Azure Databricks工作区(如通过VPN、VNet对等连接或公网访问)
  • PAT需分配足够权限(至少jobs.create和jobs.runNow权限)
  • 可通过API返回的run_id调用jobs/runs/get接口查询执行状态和结果
  • 若脚本依赖特定库或配置,需在集群配置中提前设置

内容的提问来源于stack exchange,提问作者Deepak Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:50:29