Поделиться через


Пакет SDK Databricks для Java

Примечание.

Databricks рекомендует наборы ресурсов Databricks для создания, разработки, развертывания и тестирования заданий и других ресурсов Databricks в качестве исходного кода. См. Что такое пакеты ресурсов Databricks?.

В этой статье вы узнаете, как автоматизировать операции Azure Databricks и ускорить разработку с помощью пакета SDK Databricks для Java. Эта статья дополняет пакет SDK Databricks для Java README, справочник по API и примеры.

Примечание.

Эта функция доступна в бета-версии и подходит для использования в рабочей среде.

В период бета-версии Databricks рекомендует закрепить зависимость от конкретной дополнительной версии пакета SDK Databricks для Java, от которой зависит ваш код. Например, можно закрепить зависимости в таких файлах, как pom.xml для Maven. Дополнительные сведения о фиксации зависимостей см. в разделе "Введение в механизм зависимостей".

Перед началом

Прежде чем приступить к использованию пакета SDK Databricks для Java, компьютер разработки должен иметь следующее:

  • Проверка подлинности Azure Databricks настроена.
  • Пакет средств разработки Java (JDK), совместимый с Java 8 или более поздней версией. Непрерывное тестирование интеграции (CI) с помощью пакета SDK Databricks для Java совместимо с Java версии 8, 11, 17 и 20.
  • Рекомендуется использовать интегрированную среду разработки , совместимую с Java. Databricks рекомендует IntelliJ IDEA.

Начало работы с пакетом SDK Databricks для Java

  1. В файле проекта pom.xml укажите системе сборки зависимость от пакета SDK Databricks для Java. Для этого добавьте следующий <dependency> в существующий раздел pom.xml файла <dependencies>. <dependencies> Если раздел еще не существует в файле pom.xml, необходимо добавить в файл pom.xml также родительский элемент <dependencies>.

    Например, чтобы открыть файл проекта pom.xml в IntelliJ IDEA, нажмите Просмотр > Окна инструментов > Проект, а затем дважды щелкните, чтобы открыть имя-проекта> src > pom.xml.

    <dependencies>
      <dependency>
        <groupId>com.databricks</groupId>
        <artifactId>databricks-sdk-java</artifactId>
        <version>0.0.1</version>
      </dependency>
    </dependencies>
    

    Примечание.

    Обязательно замените 0.0.1 на последнюю версию Databricks SDK для Java. Последнюю версию можно найти в центральном репозитории Maven.

  2. Инструктируйте ваш проект, чтобы он использовал объявленную зависимость от Databricks SDK для Java. Например, в окне инструментов проекта IntelliJ IDEA щелкните правой кнопкой мыши корневой узел вашего проекта, затем выберите «Перезагрузить проект».

  3. Добавьте код для импорта пакета SDK Databricks для Java и перечисления всех кластеров в рабочей области Azure Databricks. Например, в файле проекта Main.java код может быть следующим:

    import com.databricks.sdk.WorkspaceClient;
    import com.databricks.sdk.service.compute.ClusterInfo;
    import com.databricks.sdk.service.compute.ListClustersRequest;
    
    public class Main {
      public static void main(String[] args) {
        WorkspaceClient w = new WorkspaceClient();
    
        for (ClusterInfo c : w.clusters().list(new ListClustersRequest())) {
          System.out.println(c.getClusterName());
        }
      }
    }
    

    Примечание.

    Не устанавливая аргументы в предыдущем вызове WorkspaceClient w = new WorkspaceClient(), пакет SDK Databricks для Java использует свой процесс по умолчанию для проверки подлинности Azure Databricks. Чтобы переопределить это поведение по умолчанию, см. следующий раздел проверки подлинности .

  4. Выполните сборку проекта. Например, чтобы сделать это в IntelliJ IDEA, в главном меню щелкните Сборка > Сборка проекта.

  5. Запустите основной файл. Например, чтобы сделать это в IntelliJ IDEA для файла проектаMain.java, в главном меню нажмите кнопку Выполнить > команду "Main".

  6. Появится список кластеров. Например, в IntelliJ IDEA это в окне средства запуска . Чтобы отобразить это окно средства, в главном меню выберите "Вид > Окна инструментов > Выполнить".

Аутентификация пакета SDK Databricks для Java с учетной записью или рабочей областью Azure Databricks

Пакет SDK Databricks для Java реализует стандарт унифицированной проверки подлинности Databricks , консолидированный и согласованный архитектурный и программный подход к проверке подлинности. Этот подход помогает настроить и автоматизировать проверку подлинности с помощью Azure Databricks более централизованным и предсказуемым. Он позволяет настроить проверку подлинности Databricks один раз, а затем использовать эту конфигурацию в нескольких средствах Databricks и пакетах SDK без дальнейших изменений конфигурации проверки подлинности. Дополнительные сведения, включая более полные примеры кода в Java, см. в статье Databricks унифицированная проверка подлинности.

Примечание.

Пакет SDK Databricks для Java еще не реализовал проверку подлинности с помощью управляемых удостоверений Azure.

Некоторые из доступных шаблонов кода для инициализации проверки подлинности Databricks с помощью пакета SDK Databricks для Java:

  • Используйте проверку подлинности databricks по умолчанию, выполнив одно из следующих действий:

    • Создайте или определите пользовательский профиль конфигурации Databricks с обязательными полями для целевого типа проверки подлинности Databricks. Затем задайте DATABRICKS_CONFIG_PROFILE для переменной среды имя пользовательского профиля конфигурации.
    • Задайте необходимые переменные среды для целевого типа проверки подлинности Databricks.

    Затем, например, создайте экземпляр объекта с аутентификацией по умолчанию Databricks следующим образом:

    import com.databricks.sdk.WorkspaceClient;
    // ...
    WorkspaceClient w = new WorkspaceClient();
    // ...
    
  • Хардкодинг обязательных полей поддерживается, но не рекомендуется, так как это может привести к раскрытию конфиденциальной информации в вашем коде, например таких личных токенов доступа, как Azure Databricks. В следующем примере жестко кодируются узел Azure Databricks и значения маркера доступа для аутентификации Databricks:

    import com.databricks.sdk.WorkspaceClient;
    import com.databricks.sdk.core.DatabricksConfig;
    // ...
    DatabricksConfig cfg = new DatabricksConfig()
      .setHost("https://...")
      .setToken("...");
    WorkspaceClient w = new WorkspaceClient(cfg);
    // ...
    

См. также проверку подлинности в пакете SDK Databricks для Java README.

Использование служебных программ Databricks и Java с пакетом SDK Databricks для Java

Утилиты Databricks предоставляют несколько вспомогательных функций, чтобы упростить эффективную работу с объектным хранилищем, создание цепочек и параметризацию блокнотов, а также работу с секретами. Databricks предоставляет библиотеку Databricks Utilities для Scala, которую можно вызвать с помощью кода Java, чтобы программно получить доступ к утилитам Databricks.

Чтобы использовать код Java для вызова служебных программ Databricks для Scala, сделайте следующее:

  1. В проекте Java объявите зависимость от пакета SDK Databricks для Java, как описано в предыдущем разделе.

  2. Объявите зависимость от библиотеки Databricks Utilities для Scala. Для этого добавьте следующее <dependency> в существующий раздел pom.xml файла <dependencies>.

    <dependency>
      <groupId>com.databricks</groupId>
      <artifactId>databricks-dbutils-scala_2.12</artifactId>
      <version>0.1.4</version>
    </dependency>
    

    Примечание.

    Обязательно замените 0.1.4 последнюю версию библиотеки Databricks Utilities для Scala. Последнюю версию можно найти в центральном репозитории Maven.

  3. Укажите проекту, чтобы принять объявленную зависимость от служебных программ Databricks для Scala. Например, в окне инструментов проекта IntelliJ IDEA щелкните корневой узел проекта, а затем нажмите .

  4. Добавьте код для импорта и вызовите служебную программу Databricks для Scala. Например, следующий код автоматизирует том каталога Unity. В этом примере создается файл с именем zzz_hello.txt в пути тома в рабочей области, считывает данные из файла, а затем удаляет файл:

    import com.databricks.sdk.core.DatabricksConfig;
    import com.databricks.sdk.scala.dbutils.DBUtils;
    
    public class Main {
      public static void main(String[] args) {
        String filePath = "/Volumes/main/default/my-volume/zzz_hello.txt";
        String fileData = "Hello, Databricks!";
        DBUtils dbutils = DBUtils.getDBUtils(new DatabricksConfig().setProfile("DEFAULT"));
    
        dbutils.fs().put(filePath, fileData, true);
    
        System.out.println(dbutils.fs().head(filePath, 18));
    
        dbutils.fs().rm(filePath, false);
      }
    }
    
  5. Создайте проект и запустите основной файл.

Примеры кода

В следующих примерах кода показано, как использовать пакет SDK Databricks для Java для создания и удаления кластеров, создания заданий и перечисления групп на уровне учетной записи. В этих примерах кода используется пакет SDK Databricks для процесса проверки подлинности Azure Databricks по умолчанию для Java.

Для дополнительных примеров кода смотрите папку examples в репозитории SDK Databricks для Java на GitHub.

Создание кластера

В этом примере кода создается кластер с указанной версией Databricks Runtime и типом узла кластера. Этот кластер имеет одного исполнителя, и кластер автоматически завершится через 15 минут простоя.

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.compute.CreateCluster;
import com.databricks.sdk.service.compute.CreateClusterResponse;

public class Main {
  public static void main(String[] args) {
    WorkspaceClient w = new WorkspaceClient();

    CreateClusterResponse c = w.clusters().create(
      new CreateCluster()
        .setClusterName("my-cluster")
        .setSparkVersion("12.2.x-scala2.12")
        .setNodeTypeId("Standard_DS3_v2")
        .setAutoterminationMinutes(15L)
        .setNumWorkers(1L)
    ).getResponse();

    System.out.println("View the cluster at " +
      w.config().getHost() +
      "#setting/clusters/" +
      c.getClusterId() +
      "/configuration\n");
  }
}

Создание кластера с определенной версией JDK

Вы можете создать кластер, использующий определенную версию пакета средств разработки Java (JDK).

Примечание.

  • Для Databricks Runtime 18.0 JDK 21 общедоступен и по умолчанию с JDK 17 в качестве резервного варианта.
  • Для Databricks Runtime 17.3 JDK 21 находится в общедоступной предварительной версии, а JDK 17 — по умолчанию.
  • Для Databricks Runtime 16.0 или более поздней версии JDK 17 общедоступен и по умолчанию.
  • Для Databricks Runtime версии 13.1–15.4 JDK 8 — это значение по умолчанию, а JDK 17 — в общедоступной предварительной версии.

При создании кластера укажите, что кластер использует JDK 17 или JDK 21 для драйвера и исполнителя, добавив следующую переменную среды в переменные среды Spark > Advanced Options>.

Для JDK 17:

JNAME=zulu17-ca-amd64

Для JDK 21:

JNAME=zulu21-ca-amd64

Полное удаление кластера

Этот пример кода окончательно удаляет кластер с указанным идентификатором кластера из рабочей области.

import com.databricks.sdk.WorkspaceClient;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    System.out.println("ID of cluster to delete (for example, 1234-567890-ab123cd4):");

    Scanner in = new Scanner(System.in);
    String c_id = in.nextLine();
    WorkspaceClient w = new WorkspaceClient();

    w.clusters().permanentDelete(c_id);
  }
}

Создание задания

В этом примере кода создается задание Azure Databricks, которое можно использовать для запуска указанной записной книжки в указанном кластере. По мере выполнения этого кода он получает путь к существующей записной книжке, существующий идентификатор кластера и связанные параметры задания от пользователя в терминале.

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.jobs.JobTaskSettings;
import com.databricks.sdk.service.jobs.NotebookTask;
import com.databricks.sdk.service.jobs.NotebookTaskSource;
import com.databricks.sdk.service.jobs.CreateResponse;
import com.databricks.sdk.service.jobs.CreateJob;

import java.util.Scanner;
import java.util.Map;
import java.util.Collection;
import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    System.out.println("Some short name for the job (for example, my-job):");
    Scanner in = new Scanner(System.in);
    String jobName = in.nextLine();

    System.out.println("Some short description for the job (for example, My job):");
    String description = in.nextLine();

    System.out.println("ID of the existing cluster in the workspace to run the job on (for example, 1234-567890-ab123cd4):");
    String existingClusterId = in.nextLine();

    System.out.println("Workspace path of the notebook to run (for example, /Users/someone@example.com/my-notebook):");
    String notebookPath = in.nextLine();

    System.out.println("Some key to apply to the job's tasks (for example, my-key): ");
    String taskKey = in.nextLine();

    System.out.println("Attempting to create the job. Please wait...");

    WorkspaceClient w = new WorkspaceClient();

    Map<String, String> map = Map.of("", "");

    Collection<JobTaskSettings> tasks = Arrays.asList(new JobTaskSettings()
      .setDescription(description)
      .setExistingClusterId(existingClusterId)
      .setNotebookTask(new NotebookTask()
        .setBaseParameters(map)
        .setNotebookPath(notebookPath)
        .setSource(NotebookTaskSource.WORKSPACE))
      .setTaskKey(taskKey)
    );

    CreateResponse j = w.jobs().create(new CreateJob()
      .setName(jobName)
      .setTasks(tasks)
    );

    System.out.println("View  the job at " +
      w.config().getHost() +
      "/#job/" +
      j.getJobId()
    );
  }
}

Управление файлами в томах каталога Unity

В этом примере кода демонстрируются различные вызовы files функций в WorkspaceClient для доступа к томам Unity Catalog.

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.files.DirectoryEntry;
import com.databricks.sdk.service.files.DownloadResponse;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Main {
  public static void main(String[] args) throws IOException {
    String catalog          = "main";
    String schema           = "default";
    String volume           = "my-volume";
    String volumePath       = "/Volumes/" + catalog + "/" + schema + "/" + volume; // /Volumes/main/default/my-volume
    String volumeFolder     = "my-folder";
    String volumeFolderPath = volumePath + "/" + volumeFolder; // /Volumes/main/default/my-volume/my-folder
    String volumeFile       = "data.csv";
    String volumeFilePath   = volumeFolderPath + "/" + volumeFile; // /Volumes/main/default/my-volume/my-folder/data.csv
    String uploadFilePath   = "./data.csv";

    WorkspaceClient w = new WorkspaceClient();

    // Create an empty folder in a volume.
    w.files().createDirectory(volumeFolderPath);

    // Upload a file to a volume.
    try {
      File uploadFile = new File(upload_file_path);
      InputStream uploadInputStream = Files.newInputStream(Paths.get(upload_file_path));
      w.files().upload(volumeFilePath, uploadInputStream);
    } catch (java.io.IOException e) {
      System.out.println(e.getMessage());
      System.exit(-1);
    }

    // List the contents of a volume.
    Iterable<DirectoryEntry> volumeItems = w.files().listDirectoryContents(volumePath);
    for (DirectoryEntry volumeItem: volumeItems) {
      System.out.println(volumeItem.getPath());
    }

    // List the contents of a folder in a volume.
    Iterable<DirectoryEntry> volumeFolderItems = w.files().listDirectoryContents(volumeFolderPath);
    for (DirectoryEntry volumeFolderItem: volumeFolderItems) {
      System.out.println(volumeFolderItem.getPath());
    }

    // Print the contents of a file in a volume.
    DownloadResponse resp = w.files().download(volumeFilePath);
    InputStream downloadedFile = resp.getContents();

    try {
      BufferedReader reader = new BufferedReader(new InputStreamReader(downloadedFile));
      String line;
      while ((line = reader.readLine()) != null) {
          System.out.println(line);
      }
    } catch (java.io.IOException e) {
      System.out.println(e.getMessage());
      System.exit(-1);
    }

    // Delete a file from a volume.
    w.files().delete(volumeFilePath);

    // Delete a folder from a volume.
    w.files().deleteDirectory(volumeFolderPath);
  }
}

Перечислить группы уровня учетной записи

В этом примере кода перечислены отображаемые имена для всех доступных групп в учетной записи Azure Databricks.

import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
import com.databricks.sdk.service.iam.Group;
import com.databricks.sdk.service.iam.ListAccountGroupsRequest;

public class Main {
  public static void main(String[] args) {
    AccountClient a = new AccountClient();

    for (Group g : a.groups().list((new ListAccountGroupsRequest()))) {
      System.out.println(g.getDisplayName());
    }
  }
}

Использование Scala с пакетом SDK Databricks для Java

Проекты Scala можно использовать с пакетом SDK Databricks для Java. Прежде чем начать работу, компьютер разработки должен иметь следующее:

  • Проверка подлинности Azure Databricks настроена.
  • Рекомендуется использовать интегрированную среду разработки (IDE) с совместимостью Scala. Databricks рекомендует IntelliJ IDEA с подключаемым модулем Scala. Эти инструкции были протестированы с помощью IntelliJ IDEA Community Edition 2023.3.6. Если вы используете другую версию или выпуск IntelliJ IDEA, следующие инструкции могут отличаться.
  • Пакет средств разработки Java (JDK), совместимый с Java 8 или более поздней версией. Если вы хотите запустить приложения или использовать библиотеки в кластере Azure Databricks, Databricks рекомендует использовать версию JDK, соответствующую версии JDK в кластере. Чтобы найти версию JDK, включенную в определенную среду выполнения Databricks, смотрите заметки о выпуске версий Databricks Runtime и совместимость. При использовании IntelliJ IDEA можно выбрать существующую локальную установку JDK или установить новый JDK локально во время создания проекта Scala.
  • Средство сборки Scala. Databricks рекомендует sbt. Если вы используете IntelliJ IDEA, можно выбрать версию, используемую sbt во время создания проекта Scala.
  • Scala. Если вы хотите запустить приложения или использовать библиотеки в кластере Azure Databricks, Databricks рекомендует использовать версию Scala, соответствующую версии Scala в кластере. Чтобы найти версию Scala, включенную в определенную среду выполнения Databricks, ознакомьтесь с версиями заметок о выпуске Databricks Runtime и совместимостью. Если вы используете IntelliJ IDEA, можно выбрать версию Scala для использования во время создания проекта Scala.

Чтобы настроить, выполнить сборку и запуск проекта Scala, выполните следующую команду:

  1. В файле проекта build.sbt получите зависимость от пакета SDK Databricks для Java, добавив следующую строку в конец файла, а затем сохраните файл:

    libraryDependencies += "com.databricks" % "databricks-sdk-java" % "0.2.0"
    

    Примечание.

    Не забудьте заменить 0.2.0 на последнюю версию Databricks SDK для Java-библиотеки. Последнюю версию можно найти в центральном репозитории Maven.

  2. Инструктируйте ваш проект, чтобы он использовал объявленную зависимость от Databricks SDK для Java. Например, в IntelliJ IDEA щелкните значок уведомления Загрузить изменения sbt.

  3. Добавьте код для импорта пакета SDK Databricks для Java и перечисления всех кластеров в рабочей области Azure Databricks. Например, в файле проекта Main.scala код может быть следующим:

    import com.databricks.sdk.WorkspaceClient
    import com.databricks.sdk.service.compute.ListClustersRequest
    
    object Main {
      def main(args: Array[String]): Unit = {
        val w = new WorkspaceClient()
    
        w.clusters().list(new ListClustersRequest()).forEach{
          elem => println(elem.getClusterName)
        }
      }
    }
    

    Примечание.

    Не устанавливая аргументы в предыдущем вызове val w = new WorkspaceClient(), пакет SDK Databricks для Java использует свой процесс по умолчанию для проверки подлинности Azure Databricks. Чтобы переопределить это поведение по умолчанию, см. следующий раздел проверки подлинности .

  4. Выполните сборку проекта. Например, чтобы сделать это в IntelliJ IDEA, в главном меню щелкните Сборка > Сборка проекта.

  5. Запустите основной файл. Например, чтобы сделать это в IntelliJ IDEA для файла проекта Main.scala , в главном меню нажмите кнопку Run Run > 'Main.scala'.

  6. Появится список кластеров. Например, в IntelliJ IDEA это в окне средства запуска . Чтобы отобразить это окно средства, в главном меню выберите "Вид > Окна инструментов > Выполнить".

Использование служебных программ Databricks и Scala с пакетом SDK Databricks для Java

Утилиты Databricks предоставляют несколько вспомогательных функций, чтобы упростить эффективную работу с объектным хранилищем, создание цепочек и параметризацию блокнотов, а также работу с секретами. Databricks предоставляет библиотеку Databricks Utilities для Scala, которая позволяет программно получить доступ к Databricks Utilities с помощью Scala.

Чтобы вызвать служебные программы Databricks для Scala, сделайте следующее:

  1. В проекте Scala объявите зависимость от пакета SDK Databricks для Java, как описано в предыдущем разделе.

  2. Объявите зависимость от библиотеки Databricks Utilities для Scala. Например, в файле проекта build.sbt добавьте следующую строку в конец файла, а затем сохраните файл:

    libraryDependencies += "com.databricks" % "databricks-dbutils-scala_2.12" % "0.1.4"
    

    Примечание.

    Обязательно замените 0.1.4 последнюю версию библиотеки Databricks Utilities для Scala. Последнюю версию можно найти в центральном репозитории Maven.

  3. Укажите проекту, чтобы принять объявленную зависимость от служебных программ Databricks для Scala. Например, в IntelliJ IDEA щелкните значок уведомления загрузка изменений sbt.

  4. Добавьте код для импорта и вызовите служебную программу Databricks для Scala. Например, следующий код автоматизирует том каталога Unity. В этом примере создается файл с именем zzz_hello.txt в пути тома в рабочей области, считывает данные из файла, а затем удаляет файл:

    import com.databricks.sdk.scala.dbutils.DBUtils
    
    object Main {
      def main(args: Array[String]): Unit = {
        val filePath = "/Volumes/main/default/my-volume/zzz_hello.txt"
        val fileData = "Hello, Databricks!"
        val dbutils = DBUtils.getDBUtils()
    
        dbutils.fs.put(
          file = filePath,
          contents = fileData,
          overwrite = true
        )
    
        println(dbutils.fs.head(filePath))
    
        dbutils.fs.rm(filePath)
      }
    }
    

    Примечание.

    Не устанавливая никаких аргументов в предыдущем вызове val dbutils = DBUtils.getDBUtils(), Databricks Utilities for Scala использует свой процесс по умолчанию для проверки подлинности Azure Databricks.

    Чтобы переопределить это поведение по умолчанию, передайте экземпляр объекта DatabricksCfg в качестве аргумента getDBUtils. Дополнительные сведения см. в предыдущем разделе проверки подлинности .

    Обратите внимание, что если код выполняется внутри среды выполнения Databricks, этот DatabricksCfg объект игнорируется. Это связано с тем, что служебные программы Databricks для Scala делегируют выполнение встроенным служебным программам Databricks, когда работают в среде выполнения Databricks.

  5. Создайте проект и запустите основной файл.

Чтобы получить доступ к томам каталога Unity, используйте files внутри WorkspaceClient. См. раздел "Управление файлами" в томах каталога Unity. Невозможно использовать DBUtils.getDBUtils() для доступа к томам.

Тестирование

Чтобы протестировать код, используйте платформы тестирования Java, такие как JUnit. Чтобы протестировать код в имитированных условиях без вызова конечных точек REST API Azure Databricks или изменения состояния учетных записей Или рабочих областей Azure Databricks, используйте библиотеки макетирования Java, такие как Mockito.

Например, учитывая следующий файл с именем Helpers.java , содержащий createCluster функцию, которая возвращает сведения о новом кластере:

// Helpers.java

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.compute.CreateCluster;
import com.databricks.sdk.service.compute.CreateClusterResponse;

public class Helpers {
  static CreateClusterResponse createCluster(
    WorkspaceClient w,
    CreateCluster   createCluster,
    String          clusterName,
    String          sparkVersion,
    String          nodeTypeId,
    Long            autoTerminationMinutes,
    Long            numWorkers
  ) {
    return w.clusters().create(
      createCluster
        .setClusterName(clusterName)
        .setSparkVersion(sparkVersion)
        .setNodeTypeId(nodeTypeId)
        .setAutoterminationMinutes(autoTerminationMinutes)
        .setNumWorkers(numWorkers)
    ).getResponse();
  }
}

И учитывая следующий файл с именем Main.java , который вызывает функцию createCluster :

// Main.java

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.compute.CreateCluster;
import com.databricks.sdk.service.compute.CreateClusterResponse;

public class Main {
  public static void main(String[] args) {
    WorkspaceClient w = new WorkspaceClient();
    // Replace <spark-version> with the target Spark version string.
    // Replace <node-type-id> with the target node type string.
    CreateClusterResponse c = Helpers.createCluster(
      w,
      new CreateCluster(),
      "My Test Cluster",
      "<spark-version>",
      "<node-type-id>",
      15L,
      1L
    );
    System.out.println(c.getClusterId());
  }
}

Следующий файл с именем HelpersTest.java проверяет, возвращает ли createCluster функция ожидаемый ответ. Вместо того чтобы создать кластер в целевой рабочей области, этот тест макетирует WorkspaceClient объект, определяет параметры макетированного объекта, а затем передает макетируемый объект в функцию createCluster . Затем тест проверяет, возвращает ли функция ожидаемый идентификатор нового макетированного кластера.

// HelpersTest.java

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.mixin.ClustersExt;
import com.databricks.sdk.service.compute.ClusterDetails;
import com.databricks.sdk.service.compute.CreateCluster;
import com.databricks.sdk.support.Wait;
import com.databricks.sdk.service.compute.CreateClusterResponse;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class HelpersTest {
  @Test
  public void testCreateCluster() {
    WorkspaceClient mockWorkspaceClient = Mockito.mock(WorkspaceClient.class);
    ClustersExt mockClustersExt = Mockito.mock(ClustersExt.class);
    CreateCluster mockCreateCluster = new CreateCluster();
    Wait<ClusterDetails, CreateClusterResponse> mockWait = Mockito.mock(Wait.class);
    CreateClusterResponse mockResponse = Mockito.mock(CreateClusterResponse.class);

    Mockito.when(mockWorkspaceClient.clusters()).thenReturn(mockClustersExt);
    Mockito.when(mockClustersExt.create(Mockito.any(CreateCluster.class))).thenReturn(mockWait);
    Mockito.when(mockWait.getResponse()).thenReturn(mockResponse);

    // Replace <spark-version> with the target Spark version string.
    // Replace <node-type-id> with the target node type string.
    CreateClusterResponse response = Helpers.createCluster(
      mockWorkspaceClient,
      mockCreateCluster,
      "My Test Cluster",
      "<spark-version>",
      "<node-type-id>",
      15L,
      1L
    );
    assertEquals(mockResponse, response);
  }
}

Устранение неполадок

В этом разделе описываются решения распространенных проблем с пакетом SDK Databricks для Java.

Чтобы сообщить о проблемах или других отзывах, создайте проблему GitHub для пакета SDK Databricks для Java.

Ошибка: не удается проанализировать ответ

Если при попытке использовать пакет SDK Databricks для Java возникает следующая ошибка, она почти всегда указывает на проблему с конфигурацией проверки подлинности.

Error: unable to parse response. This is likely a bug in the Databricks SDK for Java or the underlying REST API.

Если возникла эта ошибка, проверьте следующее:

  • Убедитесь, что узел Databricks настроен правильно.
  • Убедитесь, что метод проверки подлинности имеет необходимые разрешения для операции API, которую вы пытаетесь выполнить.
  • Если вы находитесь за корпоративным брандмауэром, убедитесь, что он не блокирует или перенаправляет трафик API.

Распространенной причиной этой ошибки является приватная ссылка, перенаправляющая пакет SDK на страницу входа, которую пакет SDK не может обрабатывать. Обычно это происходит при попытке доступа к рабочей области с поддержкой приватных ссылок, настроенной без общедоступного доступа к Интернету из другой сети, чем сеть, к которой принадлежит конечная точка VPC.

Дополнительные сведения см. в следующем разделе:

Дополнительные ресурсы

Дополнительные сведения см. в разделе: