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

如何使用Java/Spring Boot在Azure Databricks创建子目录?ProcessBuilder调用失败排查

在Azure Databricks中用Java创建工作区子目录

可以通过Java实现Azure Databricks工作区子目录的创建,下面提供两种可靠方案:

方案一:直接调用Databricks REST API(推荐)

相比通过ProcessBuilder调用curl,直接用Java HTTP客户端调用Databricks的Workspace API更稳定,也更容易调试。核心是调用/api/2.0/workspace/mkdirs端点,示例代码如下(基于Java 11+ HttpClient):

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 DatabricksFolderCreator {
    public static void main(String[] args) throws Exception {
        String databricksToken = "<你的Databricks访问令牌>";
        String workspaceUrl = "https://<你的Databricks实例>.azuredatabricks.net";
        String folderPath = "/Users/xxx@xxx.com/testfolder4";

        // 构造请求体
        String requestBody = String.format("{ \"path\": \"%s\" }", folderPath);

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(workspaceUrl + "/api/2.0/workspace/mkdirs"))
                .header("Authorization", "Bearer " + databricksToken)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // 处理响应
        if (response.statusCode() == 200) {
            System.out.println("子目录创建成功");
        } else {
            System.err.println("创建失败,响应码:" + response.statusCode() + ",响应内容:" + response.body());
        }
    }
}

方案二:修复ProcessBuilder调用curl的问题

如果坚持用ProcessBuilder调用curl,问题通常出在参数拆分错误——不能把整个curl命令作为单个字符串传入,必须将每个命令参数拆分为数组元素,同时注意转义JSON中的双引号。示例代码:

import java.io.IOException;

public class CurlProcessBuilder {
    public static void main(String[] args) throws IOException, InterruptedException {
        String databricksToken = "<你的Databricks访问令牌>";
        String workspaceUrl = "https://<你的Databricks实例>.azuredatabricks.net";
        String folderPath = "/Users/xxx@xxx.com/testfolder4";

        // 正确拆分curl参数,每个选项和值都是独立元素
        ProcessBuilder pb = new ProcessBuilder(
                "curl",
                "-n",
                "-X", "POST",
                "-H", "Authorization: Bearer " + databricksToken,
                "-H", "Content-Type: application/json",
                "-d", "{ \"path\": \"" + folderPath + "\" }",
                workspaceUrl + "/api/2.0/workspace/mkdirs"
        );

        // 捕获输出和错误信息,方便调试
        pb.redirectErrorStream(true);
        Process process = pb.start();
        int exitCode = process.waitFor();

        // 读取输出
        String output = new String(process.getInputStream().readAllBytes());
        if (exitCode == 0) {
            System.out.println("子目录创建成功,输出:" + output);
        } else {
            System.err.println("创建失败,退出码:" + exitCode + ",输出:" + output);
        }
    }
}

注意事项

  • 确保Databricks令牌有足够的权限(至少需要Workspace权限下的Create权限);
  • 替换代码中的<你的Databricks访问令牌>、<你的Databricks实例>和实际的文件夹路径;
  • 如果使用方案二,要确保运行环境中已安装curl命令。

内容的提问来源于stack exchange,提问作者DIVYA K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:31:09