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 の使用を開始する
-
プロジェクトの
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 の中央リポジトリにあります。
-
宣言された依存関係を Databricks SDK for Java で使用するようにプロジェクトに指示します。 たとえば、IntelliJ IDEA で、プロジェクトの [プロジェクト ] ツール ウィンドウで、プロジェクトのルート ノードを右クリックし、[ プロジェクトの再読み込み ] をクリックします。
-
DatabricksSDKJavaのDatabricks をインポートし、 ワークスペース内のすべてのクラスターを一覧表示するコードを追加します。たとえば、プロジェクトの
Main.java
ファイルでは、コードは次のようになります。Javaimport 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 プロセスを使用します。このデフォルトの動作を上書きするには、次の 認証 セクションを参照してください。
-
プロジェクトをビルドします。 たとえば、IntelliJ IDEAでこれを行うには、メインメニューから [ビルド]>[プロジェクトのビルド ]をクリックします。
-
メインファイルを実行します。 たとえば、IntelliJ IDEA でプロジェクトの
Main.java
ファイルに対してこれを行うには、メインメニューから [実行] > ['Main' を実行] をクリックします。 -
クラスターのリストが表示されます。 たとえば、 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
オブジェクトをインスタンス化します。Javaimport com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ... - ターゲット Databricks 認証の種類に必要なフィールドを持つカスタム Databricks 構成プロファイル を作成または識別します。 次に、
-
必須フィールドのハードコーディングはサポートされていますが、Databricksパーソナルアクセストークンなどのコード内の機密情報が公開される危険があるため推奨はされません。以下の例では、Databricksトークン認証用にDatabricksホストとアクセストークンの値がハードコーディングされています。
Javaimport 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
-
Java プロジェクトで、前のセクションで説明したように、Databricks SDK for Java への依存関係を宣言します。
-
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 の中央リポジトリにあります。
-
宣言された依存関係を Databricks Scala 用ユーティリティに取得するようにプロジェクトに指示します。 たとえば、IntelliJ IDEA で、プロジェクトの Project ツール ウィンドウで、プロジェクトのルート ノードをクリックし、[ Maven] > [プロジェクトの再読み込み ] をクリックします。
-
インポートするコードを追加してから、Scala の Databricks ユーティリティを呼び出します。 たとえば、次のコードは Unity Catalog ボリュームを自動化します。 この例では、ワークスペース内のボリュームのパスに
zzz_hello.txt
という名前のファイルを作成し、ファイルからデータを読み取り、ファイルを削除します。Javaimport 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);
}
} -
プロジェクトをビルドし、メイン ファイルを実行します。
コード例
次のコード例は、 Databricks SDK for の Java を使用して、クラスターの作成と削除、ジョブの作成、およびアカウント レベルのグループのリストを作成する方法を示しています。 これらのコード例では、DatabricksSDK JavaのデフォルトDatabricks認証 プロセスの を使用しています。
その他のコード例については、GitHub の Databricks SDK for Java リポジトリの examples フォルダーを参照してください。
クラスターを作成する
このコード例では、指定されたDatabricks Runtimeのバージョンとクラスターのノードタイプを用いてクラスターを作成します。このクラスターは1つのワーカーを持ち、クラスターのアイドル状態が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("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 を使用するように指定します。
JNAME=zulu17-ca-amd64
ARM ベースのクラスター ( AWS Graviton インスタンスなど) を使用している場合は、代わりに次の環境変数を使用します。
JNAME=zulu17-ca-arm64
クラスターを完全に削除する
このコード例では、指定されたクラスターIDを持つクラスターをワークスペースから完全に削除します。
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、および関連するジョブ設定が取得されます。
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
機能に対するさまざまな呼び出しを示します。
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アカウント内で使用可能なすべてのグループの表示名を一覧表示します。
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 IDEA と Scala プラグインを推奨しています。 これらの手順は、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 プロジェクトを設定、ビルド、実行するには:
-
プロジェクトの
build.sbt
ファイルで、Databricks SDK for Java ライブラリへの依存関係として、ファイルの末尾に次の行を追加し、ファイルを保存します。libraryDependencies += "com.databricks" % "databricks-sdk-java" % "0.2.0"
必ず 0.2.0
を最新バージョンの Databricks SDK for Java ライブラリに置き換えてください。 最新バージョンは、 Maven の中央リポジトリにあります。
-
宣言された依存関係を Databricks SDK for Java で使用するようにプロジェクトに指示します。 例えば、IntelliJ IDEA で Load sbt changes notification icon をクリックするよ。
-
DatabricksSDKJavaのDatabricks をインポートし、 ワークスペース内のすべてのクラスターを一覧表示するコードを追加します。たとえば、プロジェクトの
Main.scala
ファイルでは、コードは次のようになります。Scalaimport 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 プロセスを使用します。このデフォルトの動作を上書きするには、次の 認証 セクションを参照してください。
-
プロジェクトをビルドします。 たとえば、IntelliJ IDEAでこれを行うには、メインメニューから [ビルド]>[プロジェクトのビルド ]をクリックします。
-
メインファイルを実行します。 たとえば、プロジェクトの
Main.scala
ファイルに対して IntelliJ IDEA これを行うには、メイン メニューから [実行] > [実行] をクリックします。Scala' . -
クラスターのリストが表示されます。 たとえば、 IntelliJ IDEAでは、これは 実行 ツール ウィンドウにあります。 このツールウィンドウを表示するには、メインメニューから「 表示」>「ツール」 Windows >実行 をクリックします。
Databricksユーティリティを使用し、Scala DatabricksSDK用の と一緒に しますJava
Databricks ユーティリティには、オブジェクトストレージの効率的な操作、ノートブックのチェーンとパラメータ化、シークレットの操作を容易にするためのヘルパー関数がいくつか用意されています。Databricksには、 ライブラリ用のDatabricks ユーティリティ が用意されており、ScalaDatabricks を使用してユーティリティScala プログラムでアクセスできます。
Scala の Databricks ユーティリティを呼び出すには、次の操作を行います。
-
Scala プロジェクトで、前のセクションで説明したように、Databricks SDK for Java への依存関係を宣言します。
-
Databricks ユーティリティ for Scala ライブラリへの依存関係を宣言します。たとえば、プロジェクトの
build.sbt
ファイルで、ファイルの末尾に次の行を追加し、ファイルを保存します。libraryDependencies += "com.databricks" % "databricks-dbutils-scala_2.12" % "0.1.4"
必ず0.1.4
を最新バージョンの Databricks ユーティリティ for Scala ライブラリに置き換えてください。 最新バージョンは、 Maven の中央リポジトリにあります。
-
宣言された依存関係を Databricks Scala 用ユーティリティに取得するようにプロジェクトに指示します。 例えば、IntelliJ IDEA で Load sbt changes notification icon をクリックするよ。
-
インポートするコードを追加してから、Scala の Databricks ユーティリティを呼び出します。 たとえば、次のコードは Unity Catalog ボリュームを自動化します。 この例では、ワークスペース内のボリュームのパスに
zzz_hello.txt
という名前のファイルを作成し、ファイルからデータを読み取り、ファイルを削除します。Scalaimport 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 ユーティリティに委任されるためです。
- プロジェクトをビルドし、メイン ファイルを実行します。
Unity Catalog ボリュームにアクセスするには、WorkspaceClient
内の files
を使用します。「Unity Catalog ボリューム内のファイルの管理」を参照してください。DBUtils.getDBUtils()
を使用してボリュームにアクセスすることはできません。
テスティング
コードをテストするには、 JUnit などの Java テスト・フレームワークを使用します。 Databricks REST API エンドポイントを呼び出したり、Databricks アカウントやワークスペースの状態を変更したりせずに、シミュレートされた条件下でコードをテストするには、 MockitoなどのJavaモックライブラリを使用します。
たとえば、新しいクラスターに関する情報を返すcreateCluster
関数を含むHelpers.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
という名前の次のファイルが与えられます。
// 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を返すかどうかをチェックします。
// 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);
}
}
追加のリソース
詳細については、以下を参照してください。
-
Databricks SDK for Java の README
-
Databricks SDK for Java API リファレンス