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


Пакет SDK Databricks для Java

В этой статье вы узнаете, как автоматизировать операции в учетных записях 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 файле, необходимо также добавить <dependencies> родительский элемент в pom.xml файл.

    Например, чтобы открыть файл проекта pom.xml в IntelliJ IDEA, нажмите кнопку View > Tool Windows > Project, а затем дважды щелкните, чтобы открыть pom.xml> имени> проекта.

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

    Примечание.

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

  2. Укажите проекту принять объявленную зависимость от пакета SDK Databricks для 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 это в окне средства запуска . Чтобы отобразить это окно средства, в главном меню выберите команду "Просмотр > инструментов", чтобы запустить windows>.

Проверка подлинности пакета 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.

    Затем создайте экземпляр объекта с проверкой WorkspaceClient подлинности 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 для Scala , которую можно вызвать с помощью кода Java, чтобы обеспечить программный доступ к Databricks Utilities.

Чтобы использовать код 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 щелкните корневой узел проекта и нажмите кнопку Maven > Reload Project.

  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.

Дополнительные примеры кода см . в папке примеров в пакете 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 17

Примечание.

JDK 8 полностью поддерживается. JDK 17 находится в общедоступной предварительной версии для Databricks Runtime версии 13.1 и выше.

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

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

JNAME=zulu17-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.

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 последнюю версию пакета SDK Databricks для библиотеки Java. Последнюю версию можно найти в центральном репозитории Maven.

  2. Укажите проекту принять объявленную зависимость от пакета SDK Databricks для Java. Например, в IntelliJ IDEA щелкните значок уведомления об изменениях load 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 это в окне средства запуска . Чтобы отобразить это окно средства, в главном меню выберите команду "Просмотр > инструментов", чтобы запустить windows>.

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

Служебные программы Databricks предоставляют несколько вспомогательных функций, чтобы упростить работу с хранилищем объектов эффективно, цепочку и параметризацию записных книжек и работать с секретами. Databricks предоставляет служебные программы Databricks для Scala , чтобы обеспечить программный доступ к служебным программам Databricks с 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 щелкните значок уведомления об изменениях load 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);
  }
}

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

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