メインコンテンツまでスキップ

Java 用の Databricks SDK

注記

Databricks では、ジョブやその他の Databricks リソースをソース コードとして作成、開発、デプロイ、テストするために、Databricks アセット バンドルを推奨しています。 「Databricks アセットバンドルとは」を参照してください。

この記事では、 Databricks SDK for Java を使用して Databricks の運用を自動化し、開発を加速する方法について説明します。 この記事では、Databricks SDK for Java の README、API リファレンスおよび例を補足します。

注記

この機能は ベータ版 であり、本番運用で使用しても問題ありません。

ベータ期間中は、 では、コードが依存する について、Databricks の特定のマイナー バージョンへの依存関係をピン留めすることをお勧めします。DatabricksSDKJavaたとえば、 pom.xml for Maven などのファイルに依存関係をピン留めできます。 依存関係のピン留めの詳細については 、「依存関係メカニズムの概要」を参照してください。

始める前に

Databricks SDK for Java の使用を開始する前に、開発用マシンに次のものが必要です。

  • Databricks 認証 が構成されています。
  • Java 8 以上と互換性のある Java Development Kit (JDK)。 Databricks SDK for Java を使用した継続的インテグレーション (CI) テストは、Java バージョン 8、11、17、20 と互換性があります。
  • Java 互換の統合開発環境 (IDE) をお勧めします。 Databricks では IntelliJ IDEA を推奨しています。

Databricks SDK for Java の使用を開始する

  1. プロジェクトの pom.xml ファイルで、Databricks SDK for Java に依存するようにビルド システムに指示します。 これを行うには、pom.xml ファイルの既存の <dependencies> セクションに次の<dependency>を追加します。<dependencies> セクションが pom.xml ファイル内にまだ存在しない場合は、<dependencies>親要素も pom.xml ファイルに追加する必要があります。

    たとえば、プロジェクトの pom.xml ファイルを IntelliJ IDEAで開くには、[ プロジェクト] > [ツールの表示] をクリックし、[プロジェクト] Windows > [プロジェクト ] > src > pom.xml をダブルクリックして開きます。

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

必ず 0.0.1 を最新バージョンの Databricks SDK for Java に置き換えてください。 最新バージョンは、 Maven の中央リポジトリにあります。

  1. 宣言された依存関係を Databricks SDK for Java で使用するようにプロジェクトに指示します。 たとえば、IntelliJ IDEA で、プロジェクトの [プロジェクト ] ツール ウィンドウで、プロジェクトのルート ノードを右クリックし、[ プロジェクトの再読み込み ] をクリックします。

  2. DatabricksSDKJavaのDatabricks をインポートし、 ワークスペース内のすべてのクラスターを一覧表示するコードを追加します。たとえば、プロジェクトの Main.java ファイルでは、コードは次のようになります。

    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() に設定しないことで、 のDatabricksSDK は、Java 認証の実行にデフォルトDatabricks プロセスを使用します。このデフォルトの動作を上書きするには、次の 認証 セクションを参照してください。

  1. プロジェクトをビルドします。 たとえば、IntelliJ IDEAでこれを行うには、メインメニューから [ビルド]>[プロジェクトのビルド ]をクリックします。

  2. メインファイルを実行します。 たとえば、IntelliJ IDEA でプロジェクトの Main.java ファイルに対してこれを行うには、メインメニューから [実行] > ['Main' を実行] をクリックします。

  3. クラスターのリストが表示されます。 たとえば、 IntelliJ IDEAでは、これは 実行 ツール ウィンドウにあります。 このツールウィンドウを表示するには、メインメニューから「 表示」>「ツール」 Windows >実行 をクリックします。

Databricks アカウントまたはワークスペースで Databricks SDK for Java を認証します

Databricks SDK for Java は、 Databricks クライアント統合認証 標準を実装し、認証に対する統合された一貫性のあるアーキテクチャおよびプログラムによるアプローチを実装します。 このアプローチにより、Databricks による認証の設定と自動化をより一元化し、予測可能にすることができます。 これにより、Databricks 認証を一度構成すると、認証構成をさらに変更することなく、その構成を複数の Databricks ツールや SDK で使用できます。 詳細については、Javaのより詳細なコード例を含む、「クライアント統合認証Databricks」を参照してください。

Databricks SDK for Java を使用して Databricks 認証を初期化するために使用できるコーディング パターンには、次のようなものがあります。

  • 以下のいずれかを実行して、Databricksのデフォルト認証を使用します。

    • ターゲット Databricks 認証の種類に必要なフィールドを持つカスタム Databricks 構成プロファイル を作成または識別します。 次に、 DATABRICKS_CONFIG_PROFILE 環境変数をカスタム構成プロファイルの名前に設定します。
    • ターゲットのDatabricks認証タイプに必要とされる環境変数を設定します。

    次に、たとえば次のようにDatabricksのデフォルト認証でWorkspaceClientオブジェクトをインスタンス化します。

    Java
    import com.databricks.sdk.WorkspaceClient;
    // ...
    WorkspaceClient w = new WorkspaceClient();
    // ...
  • 必須フィールドのハードコーディングはサポートされていますが、Databricksパーソナルアクセストークンなどのコード内の機密情報が公開される危険があるため推奨はされません。以下の例では、Databricksトークン認証用にDatabricksホストとアクセストークンの値がハードコーディングされています。

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

Databricks SDK for Java の README の 「認証 」も参照してください。

Databricksユーティリティを使用し、Java用のDatabricks SDKと一緒にJavaします

Databricks ユーティリティには、オブジェクトストレージの効率的な操作、ノートブックのチェーンとパラメータ化、シークレットの操作を容易にするためのヘルパー関数がいくつか用意されています。Databricks には、Java コードで呼び出すことができる Databricks Scala ユーティリティ ライブラリ が用意されており、プログラムで Databricks ユーティリティにアクセスできます。

Javaコードを使用して のDatabricks ユーティリティを呼び出すには、次の手順を実行します。Scala

  1. Java プロジェクトで、前のセクションで説明したように、Databricks SDK for Java への依存関係を宣言します。

  2. Databricks ユーティリティ for Scala ライブラリへの依存関係を宣言します。これを行うには、pom.xml ファイルの既存の <dependencies> セクションに次の<dependency>を追加します。

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

必ず0.1.4を最新バージョンの Databricks ユーティリティ for Scala ライブラリに置き換えてください。 最新バージョンは、 Maven の中央リポジトリにあります。

  1. 宣言された依存関係を Databricks Scala 用ユーティリティに取得するようにプロジェクトに指示します。 たとえば、IntelliJ IDEA で、プロジェクトの Project ツール ウィンドウで、プロジェクトのルート ノードをクリックし、[ Maven] > [プロジェクトの再読み込み ] をクリックします。

  2. インポートするコードを追加してから、Scala の Databricks ユーティリティを呼び出します。 たとえば、次のコードは Unity Catalog ボリュームを自動化します。 この例では、ワークスペース内のボリュームのパスに zzz_hello.txt という名前のファイルを作成し、ファイルからデータを読み取り、ファイルを削除します。

    Java
    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);
    }
    }
  3. プロジェクトをビルドし、メイン ファイルを実行します。

コード例

次のコード例は、 Databricks SDK for の Java を使用して、クラスターの作成と削除、ジョブの作成、およびアカウント レベルのグループのリストを作成する方法を示しています。 これらのコード例では、DatabricksSDK JavaのデフォルトDatabricks認証 プロセスの を使用しています。

その他のコード例については、GitHub の Databricks SDK for Java リポジトリの examples フォルダーを参照してください。

クラスターを作成する

このコード例では、指定されたDatabricks Runtimeのバージョンとクラスターのノードタイプを用いてクラスターを作成します。このクラスターは1つのワーカーを持ち、クラスターのアイドル状態が15分経過すると自動的に終了します。

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();

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

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

JDK 17 を使用するクラスターの作成

注記

Databricks Runtime 16.0 以降では、JDK 17 が一般公開されており、デフォルト.Databricks Runtime バージョン 13.1 から 15.4 の場合、JDK 8 がデフォルトであり、JDK 17 はパブリック プレビュー段階です。

このセクションでは、 Java Development Kit (JDK) を使用してクラスターを作成するためのガイドを提供します。 JDK 17 を使用してクラスターを作成し、ノートブックとジョブで Java を使用する方法について説明します。

クラスターを作成するときは、次の環境変数を [Advanced Options] > Spark > [環境変数 ] に追加して、クラスターでドライバとエグゼキューターの両方に JDK 17 を使用するように指定します。

Bash
JNAME=zulu17-ca-amd64

ARM ベースのクラスター ( AWS Graviton インスタンスなど) を使用している場合は、代わりに次の環境変数を使用します。

Bash
JNAME=zulu17-ca-arm64

クラスターを完全に削除する

このコード例では、指定されたクラスターIDを持つクラスターをワークスペースから完全に削除します。

Java
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);
}
}

ジョブを作成する

このコード例では、指定したクラスターで指定したノートブックを実行するために使用できる Databricks ジョブを作成します。 このコードを実行すると、ターミナルのユーザーから既存のノートブックのパス、既存のクラスター ID、および関連するジョブ設定が取得されます。

Java
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 Catalog ボリューム内のファイルを管理する

このコード例では、Unity Catalog ボリュームにアクセスするために WorkspaceClient 内の files 機能に対するさまざまな呼び出しを示します。

Java
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);
}
}

アカウントレベルのグループを一覧表示する

このコード例では、Databricksアカウント内で使用可能なすべてのグループの表示名を一覧表示します。

Java
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());
}
}
}

Databricks SDK for Java で Scala を使用する

Scala プロジェクトは、Databricks SDK for Java と共に使用できます。 開始する前に、開発マシンに次のものが必要です。

  • Databricks 認証 が構成されています。
  • Scala 互換の統合開発環境 (IDE) をお勧めします。 Databricks では、 IntelliJ IDEAScala プラグインを推奨しています。 これらの手順は、IntelliJ IDEA Community Edition 2023.3.6 でテストされました。 IntelliJ IDEAの異なるバージョンまたはエディションを使用する場合、次の手順が異なる場合があります。
  • Java 8 以上と互換性のある Java Development Kit (JDK)。 Databricks クラスターでアプリケーションを実行したり、ライブラリを使用したりDatabricksする場合は、クラスターの JDK バージョンと一致するバージョンの JDK を使用することをお勧めします。特定のDatabricks Runtimeに含まれている JDK バージョンを検索するには、リリースノートのバージョンと互換性Databricks Runtimeを参照してください。IntelliJ IDEAを使用する場合は、既存のローカルJDKインストールを選択するか、Scalaプロジェクトの作成時に新しいJDKをローカルにインストールできます。
  • Scala ビルドツール。 Databricks では、 sbt. IntelliJ IDEAを使用する場合は、Scalaプロジェクトの作成時に使用する sbt バージョンを選択できます。
  • Scala。 Databricks クラスターでアプリケーションを実行したり、ライブラリを使用したりDatabricksする場合は、クラスターのScalaバージョンと一致する Scala のバージョンを使用することをお勧めします。Scala特定の に含まれている バージョンを見つけるにはDatabricks Runtime 、「Databricks Runtime リリースノートのバージョンと互換性 」を参照してください。IntelliJ IDEAを使用する場合は、Scalaプロジェクトの作成時に使用するScalaバージョンを選択できます。

Scala プロジェクトを設定、ビルド、実行するには:

  1. プロジェクトの build.sbt ファイルで、Databricks SDK for Java ライブラリへの依存関係として、ファイルの末尾に次の行を追加し、ファイルを保存します。

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

必ず 0.2.0 を最新バージョンの Databricks SDK for Java ライブラリに置き換えてください。 最新バージョンは、 Maven の中央リポジトリにあります。

  1. 宣言された依存関係を Databricks SDK for Java で使用するようにプロジェクトに指示します。 例えば、IntelliJ IDEA で Load sbt changes notification icon をクリックするよ。

  2. DatabricksSDKJavaのDatabricks をインポートし、 ワークスペース内のすべてのクラスターを一覧表示するコードを追加します。たとえば、プロジェクトの Main.scala ファイルでは、コードは次のようになります。

    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() に設定しないことで、 のDatabricksSDK は、Java 認証の実行にデフォルトDatabricks プロセスを使用します。このデフォルトの動作を上書きするには、次の 認証 セクションを参照してください。

  1. プロジェクトをビルドします。 たとえば、IntelliJ IDEAでこれを行うには、メインメニューから [ビルド]>[プロジェクトのビルド ]をクリックします。

  2. メインファイルを実行します。 たとえば、プロジェクトの Main.scala ファイルに対して IntelliJ IDEA これを行うには、メイン メニューから [実行] > [実行] をクリックします。Scala' .

  3. クラスターのリストが表示されます。 たとえば、 IntelliJ IDEAでは、これは 実行 ツール ウィンドウにあります。 このツールウィンドウを表示するには、メインメニューから「 表示」>「ツール」 Windows >実行 をクリックします。

Databricksユーティリティを使用し、Scala DatabricksSDK用の と一緒に しますJava

Databricks ユーティリティには、オブジェクトストレージの効率的な操作、ノートブックのチェーンとパラメータ化、シークレットの操作を容易にするためのヘルパー関数がいくつか用意されています。Databricksには、 ライブラリ用のDatabricks ユーティリティ が用意されており、ScalaDatabricks を使用してユーティリティScala プログラムでアクセスできます。

Scala の Databricks ユーティリティを呼び出すには、次の操作を行います。

  1. Scala プロジェクトで、前のセクションで説明したように、Databricks SDK for Java への依存関係を宣言します。

  2. Databricks ユーティリティ for Scala ライブラリへの依存関係を宣言します。たとえば、プロジェクトの build.sbt ファイルで、ファイルの末尾に次の行を追加し、ファイルを保存します。

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

必ず0.1.4を最新バージョンの Databricks ユーティリティ for Scala ライブラリに置き換えてください。 最新バージョンは、 Maven の中央リポジトリにあります。

  1. 宣言された依存関係を Databricks Scala 用ユーティリティに取得するようにプロジェクトに指示します。 例えば、IntelliJ IDEA で Load sbt changes notification icon をクリックするよ。

  2. インポートするコードを追加してから、Scala の Databricks ユーティリティを呼び出します。 たとえば、次のコードは Unity Catalog ボリュームを自動化します。 この例では、ワークスペース内のボリュームのパスに zzz_hello.txt という名前のファイルを作成し、ファイルからデータを読み取り、ファイルを削除します。

    Scala
    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 ユーティリティ for Scala は、 Databricks 認証の実行にデフォルト プロセスを使用します。

このデフォルトの動作をオーバーライドするには、インスタンス化された DatabricksCfg オブジェクトを引数として getDBUtilsに渡します。 詳細については、前述の 認証 のセクションを参照してください。

ただし、コードが Databricks Runtime 内で実行されている場合、この DatabricksCfg オブジェクトは無視されることに注意してください。 これは、Scala 用の Databricks ユーティリティが、Databricks Runtime 内で実行されるときに組み込みの Databricks ユーティリティに委任されるためです。

  1. プロジェクトをビルドし、メイン ファイルを実行します。

Unity Catalog ボリュームにアクセスするには、WorkspaceClient内の files を使用します。「Unity Catalog ボリューム内のファイルの管理」を参照してください。DBUtils.getDBUtils()を使用してボリュームにアクセスすることはできません。

テスティング

コードをテストするには、 JUnit などの Java テスト・フレームワークを使用します。 Databricks REST API エンドポイントを呼び出したり、Databricks アカウントやワークスペースの状態を変更したりせずに、シミュレートされた条件下でコードをテストするには、 MockitoなどのJavaモックライブラリを使用します。

たとえば、新しいクラスターに関する情報を返すcreateCluster関数を含むHelpers.javaという名前の次のファイルがあるとします。

Java
// 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という名前の次のファイルが与えられます。

Java
// 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関数にモックしたオブジェクトを渡します。次に、この関数が新しいモックされたクラスタのIDを返すかどうかをチェックします。

Java
// 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);
}
}

追加のリソース

詳細については、以下を参照してください。

この記事は役に立ちましたか?