Megosztás a következőn keresztül:


Databricks SDK for Java

Ebből a cikkből megtudhatja, hogyan automatizálhatja az Azure Databricks-fiókok, -munkaterületek és kapcsolódó erőforrások műveleteit a Java Databricks SDK-val. Ez a cikk kiegészíti a Java README-hez készült Databricks SDK-t, az API-referenciákat és példákat.

Feljegyzés

Ez a funkció bétaverzióban érhető el, és éles környezetben is használható.

A bétaidőszak alatt a Databricks azt javasolja, hogy rögzítse a Java Databricks SDK adott alverziójának függőségét, amelytől a kód függ. Rögzítheti például a függőségeket olyan fájlokban, mint pom.xml a Maven. A függőségek rögzítésével kapcsolatos további információkért lásd : Bevezetés a függőségi mechanizmusba.

Mielőtt elkezdené

A Java Databricks SDK használatának megkezdése előtt a fejlesztőgépnek a következőkkel kell rendelkeznie:

  • Azure Databricks-hitelesítés konfigurálva.
  • Java Fejlesztői készlet (JDK), amely kompatibilis a Java 8 vagy újabb verzióval. A Java Databricks SDK-val való folyamatos integrációs (CI) tesztelés kompatibilis a Java 8., 11., 17. és 20. verziójával.
  • Java-kompatibilis integrált fejlesztési környezet (IDE) használata ajánlott. A Databricks az IntelliJ IDEA-t javasolja.

A Java Databricks SDK használatának első lépései

  1. A projekt fájljában pom.xml utasítsa a buildrendszert, hogy függjön a Java-hoz készült Databricks SDK-tól. Ehhez adja hozzá a következőt <dependency> a pom.xml fájl meglévő <dependencies> szakaszához. Ha a <dependencies> szakasz még nem létezik a pom.xml fájlban, a szülőelemet is hozzá kell adnia <dependencies> a pom.xml fájlhoz.

    Ha például meg szeretné nyitni a projekt fájlját pom.xml az IntelliJ IDEA-ban, kattintson a Windows > Project nézet > eszközre, majd kattintson duplán a projektnév> src > pom.xml megnyitásához.

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

    Feljegyzés

    Mindenképpen cserélje le 0.0.1 a Java Databricks SDK legújabb verziójára. A legújabb verziót a Maven központi adattárában találja.

  2. Utasítsa a projektet, hogy vegye figyelembe a Java Databricks SDK-ra vonatkozó deklarált függőséget. Az IntelliJ IDEA-ban például a projekt Projekt eszközablakában kattintson a jobb gombbal a projekt gyökércsomópontjára, majd kattintson a Project újratöltése parancsra.

  3. Adjon hozzá kódot a Java Databricks SDK importálásához és az Azure Databricks-munkaterület összes fürtjének listázásához. Egy projekt fájljában Main.java például a kód a következő lehet:

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

    Feljegyzés

    Ha az előző hívásban WorkspaceClient w = new WorkspaceClient()nem állít be argumentumokat, a Java Databricks SDK az alapértelmezett folyamatot használja az Azure Databricks-hitelesítés végrehajtásához. Az alapértelmezett viselkedés felülbírálásához tekintse meg a következő hitelesítési szakaszt.

  4. Hozza létre a projektet. Ehhez például az IntelliJ IDEA-ban a főmenüben kattintson a Build Project gombra>.

  5. Futtassa a fő fájlt. Ha például egy projekt fájljához Main.java az IntelliJ IDEA-ban szeretné ezt megtenni, kattintson a főmenüBen a Futtatás főmenüre>.

  6. Megjelenik a fürtök listája. Az IntelliJ IDEA-ban például ez a Futtatás eszközablakban található. Az eszközablak megjelenítéséhez a főmenüben kattintson a Windows-futtatás >eszköz megtekintése parancsra>.

A Java Databricks SDK hitelesítése az Azure Databricks-fiókkal vagy -munkaterülettel

A Java Databricks SDK a Databricks-ügyfél egységes hitelesítési szabványát implementálja, amely a hitelesítés egységes és egységes architekturális és programozott megközelítése. Ez a megközelítés segít központosítottabbá és kiszámíthatóbbá tenni az Azure Databricks-hitelesítés beállítását és automatizálását. Lehetővé teszi a Databricks-hitelesítés egyszeri konfigurálását, majd ezt a konfigurációt több Databricks-eszközön és SDK-ban is használhatja további hitelesítési konfigurációmódosítások nélkül. További információkért, beleértve a Java teljesebb kód példáit, tekintse meg a Databricks-ügyfél egységesített hitelesítését.

Feljegyzés

A Java Databricks SDK még nem implementálta az Azure által felügyelt identitások hitelesítését.

A Databricks-hitelesítésnek a Java Databricks SDK-val való inicializálásához rendelkezésre álló kódolási minták közé tartoznak a következők:

  • Használja a Databricks alapértelmezett hitelesítését az alábbiak egyikével:

    • Egyéni Databricks-konfigurációs profil létrehozása vagy azonosítása a cél Databricks-hitelesítési típushoz szükséges mezőkkel. Ezután állítsa a DATABRICKS_CONFIG_PROFILE környezeti változót az egyéni konfigurációs profil nevére.
    • Adja meg a cél Databricks-hitelesítési típushoz szükséges környezeti változókat.

    Ezután példányosíthat például egy WorkspaceClient objektumot a Databricks alapértelmezett hitelesítésével az alábbiak szerint:

    import com.databricks.sdk.WorkspaceClient;
    // ...
    WorkspaceClient w = new WorkspaceClient();
    // ...
    
  • A szükséges mezők szigorú kódolása támogatott, de nem ajánlott, mivel a kód bizalmas adatainak, például az Azure Databricks személyes hozzáférési jogkivonatainak felfedését kockáztatja. Az alábbi, a Databricks-jogkivonat-hitelesítéshez használt Azure Databricks-gazda- és hozzáférési jogkivonat-értékek a következő példa:

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

Lásd még : Hitelesítés a Java README-hez készült Databricks SDK-ban.

A Databricks Utilities és a Java használata a Java Databricks SDK-val

A Databricks Utilities számos segédfüggvényt biztosít, amelyek megkönnyítik az objektumtárolás hatékony használatát, a jegyzetfüzetek láncolását és paraméterezését, valamint a titkos kulcsok használatát. A Databricks egy Databricks-segédprogramokat biztosít a Scala-kódtárhoz , amelyet Java-kóddal hívhat meg, hogy programozott módon hozzáférhessen a Databricks Utilities-hez.

Ha Java-kóddal szeretné meghívni a Databricks Utilities for Scala-t, tegye a következőket:

  1. A Java-projektben deklaráljon függőséget a Java Databricks SDK-ról az előző szakaszban leírtak szerint.

  2. Deklaráljon függőséget a Databricks Utilities for Scala könyvtárban. Ehhez adja hozzá a következőt <dependency> a pom.xml fájl meglévő <dependencies> szakaszához:

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

    Feljegyzés

    Mindenképpen cserélje le 0.1.4 a Scala-kódtárHoz készült Databricks Utilities legújabb verzióját. A legújabb verziót a Maven központi adattárában találja.

  3. Utasítsa a projektet, hogy vegye át a Deklarált függőséget a Scala Databricks segédprogramjaitól. Az IntelliJ IDEA-ban például a projekt Projekt eszközablakában kattintson a projekt gyökércsomópontjára, majd a Maven > Reload Project elemre.

  4. Adjon hozzá kódot az importáláshoz, majd hívja meg a Scala Databricks segédprogramját. Az alábbi kód például automatizál egy Unity Catalog-kötetet. Ez a példa létrehoz egy fájlt zzz_hello.txt a kötet munkaterületen belüli elérési útján, beolvassa az adatokat a fájlból, majd törli a fájlt:

    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. Készítse el a projektet, és futtassa a fő fájlt.

Kódpéldák

Az alábbi példakód bemutatja, hogyan használhatja a Java Databricks SDK-t fürtök létrehozására és törlésére, feladatok létrehozására és fiókszintű csoportok listázására. Ezek a példakódok a Databricks SDK-t használják a Java alapértelmezett Azure Databricks-hitelesítési folyamatához.

További kódpéldákat a GitHub Databricks SDK for Java-adattárában talál.

Fürt létrehozása

Ez a példakód létrehoz egy fürtöt a megadott Databricks Runtime-verzióval és fürtcsomóponttípussal. Ez a fürt egy feldolgozóval rendelkezik, és a fürt 15 perc tétlenség után automatikusan leáll.

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-et használó fürt létrehozása

Feljegyzés

A JDK 8 teljes mértékben támogatott. A JDK 17 nyilvános előzetes verzióban érhető el a Databricks Runtime 13.1-s és újabb verzióihoz.

Ez a szakasz útmutatást nyújt a fürtök Java Development Kit (JDK) használatával történő létrehozásához. Megtudhatja, hogyan hozhat létre fürtöt JDK 17-zel a Java jegyzetfüzetekben és feladatokban való használatához.

Fürt létrehozásakor adja meg, hogy a fürt JDK 17-et használjon az illesztőprogramhoz és a végrehajtóhoz is, ha hozzáadja a következő környezeti változót az Advanced Options Spark környezeti változóihoz:> >

JNAME=zulu17-ca-amd64

Fürt végleges törlése

Ez a példakód véglegesen törli a megadott fürtazonosítóval rendelkező fürtöt a munkaterületről.

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

Feladat létrehozása

Ez a példakód létrehoz egy Azure Databricks-feladatot, amely a megadott jegyzetfüzet futtatására használható a megadott fürtön. A kód futtatásakor lekéri a meglévő jegyzetfüzet elérési útját, a meglévő fürtazonosítót és a kapcsolódó feladatbeállításokat a terminál felhasználójától.

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

Fájlok kezelése Unity Catalog-kötetekben

Ez a példakód bemutatja a files Unity-katalógus köteteihez való hozzáféréshez szükséges funkciók WorkspaceClient különböző hívásait.

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

Fiókszintű csoportok listázása

Ez a példakód felsorolja az Azure Databricks-fiókban elérhető összes csoport megjelenítendő nevét.

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

A Scala használata a Java Databricks SDK-val

Scala-projekteket használhat a Java Databricks SDK-val. A kezdés előtt a fejlesztőgépnek a következőket kell tartalmaznia:

  • Azure Databricks-hitelesítés konfigurálva.
  • Scala-kompatibilis integrált fejlesztési környezet (IDE) használata ajánlott. A Databricks az IntelliJ IDEA-t javasolja a Scala beépülő modullal. Ezeket az utasításokat az IntelliJ IDEA Community Edition 2023.3.6-os verziójával teszteltük. Ha az IntelliJ IDEA másik verzióját vagy kiadását használja, az alábbi utasítások eltérhetnek.
  • Java Development Kit (JDK), amely kompatibilis a Java 8 vagy újabb verzióval. Ha futtatni szeretné az alkalmazásait, vagy egy Azure Databricks-fürtön szeretné használni a kódtárakat, a Databricks azt javasolja, hogy a JDK egy olyan verzióját használja, amely megfelel a fürt JDK-verziójának. Az adott Databricks Runtime-hoz tartozó JDK-verzió megkereséséhez tekintse meg a Databricks Runtime kibocsátási megjegyzéseinek verzióit és kompatibilitását. Ha IntelliJ IDEA-t használ, választhat egy meglévő helyi JDK-telepítést, vagy telepítheti helyileg az új JDK-t a Scala-projekt létrehozása során.
  • Scala buildelési eszköz. A Databricks javasolja sbt. Ha IntelliJ IDEA-t használ, kiválaszthatja a sbt Scala-projekt létrehozása során használni kívánt verziót.
  • Scala. Ha futtatni szeretné az alkalmazásait, vagy egy Azure Databricks-fürtön szeretné használni a kódtárakat, a Databricks azt javasolja, hogy a Scala egy olyan verzióját használja, amely megfelel a fürt Scala-verziójának. Az adott Databricks Runtime-hoz tartozó Scala-verzió megkereséséhez tekintse meg a Databricks Runtime kibocsátási megjegyzéseinek verzióit és kompatibilitását. Ha IntelliJ IDEA-t használ, kiválaszthatja a Scala-projekt létrehozása során használni kívánt Scala-verziót.

A Scala-projekt konfigurálása, létrehozása és futtatása:

  1. A projekt fájljában build.sbt függjön a Databricks SDK for Java-kódtártól a következő sor hozzáadásával a fájl végéhez, majd mentse a fájlt:

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

    Feljegyzés

    Mindenképpen cserélje le 0.2.0 a Java-hoz készült Databricks SDK legújabb verzióját. A legújabb verziót a Maven központi adattárában találja.

  2. Utasítsa a projektet, hogy vegye figyelembe a Java Databricks SDK-ra vonatkozó deklarált függőséget. Az IntelliJ IDEA-ban például kattintson a Load sbt changes notification ikonra.

  3. Adjon hozzá kódot a Java Databricks SDK importálásához és az Azure Databricks-munkaterület összes fürtjének listázásához. Egy projekt fájljában Main.scala például a kód a következő lehet:

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

    Feljegyzés

    Ha az előző hívásban val w = new WorkspaceClient()nem állít be argumentumokat, a Java Databricks SDK az alapértelmezett folyamatot használja az Azure Databricks-hitelesítés végrehajtásához. Az alapértelmezett viselkedés felülbírálásához tekintse meg a következő hitelesítési szakaszt.

  4. Hozza létre a projektet. Ehhez például az IntelliJ IDEA-ban a főmenüben kattintson a Build Project gombra>.

  5. Futtassa a fő fájlt. Ehhez például az IntelliJ IDEA-ban egy projekt fájljához Main.scala kattintson a főmenüBen a Run Run 'Main.scala' (Fő.scala) parancsra>.

  6. Megjelenik a fürtök listája. Az IntelliJ IDEA-ban például ez a Futtatás eszközablakban található. Az eszközablak megjelenítéséhez a főmenüben kattintson a Windows-futtatás >eszköz megtekintése parancsra>.

A Databricks Utilities és a Scala használata a Java Databricks SDK-val

A Databricks Utilities számos segédfüggvényt biztosít, amelyek megkönnyítik az objektumtárolás hatékony használatát, a jegyzetfüzetek láncolását és paraméterezését, valamint a titkos kulcsok használatát. A Databricks databricks segédprogramokat biztosít a Scala-kódtárhoz , amellyel programozott módon érheti el a Databricks segédprogramokat a Scalával.

A Databricks Utilities for Scala meghívásához tegye a következőket:

  1. A Scala-projektben deklaráljon függőséget a Java Databricks SDK-ról az előző szakaszban leírtak szerint.

  2. Deklaráljon függőséget a Databricks Utilities for Scala könyvtárban. A projekt fájljában build.sbt például adja hozzá a következő sort a fájl végéhez, majd mentse a fájlt:

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

    Feljegyzés

    Mindenképpen cserélje le 0.1.4 a Scala-kódtárHoz készült Databricks Utilities legújabb verzióját. A legújabb verziót a Maven központi adattárában találja.

  3. Utasítsa a projektet, hogy vegye át a Deklarált függőséget a Scala Databricks segédprogramjaitól. Az IntelliJ IDEA-ban például kattintson a Load sbt changes notification ikonra.

  4. Adjon hozzá kódot az importáláshoz, majd hívja meg a Scala Databricks segédprogramját. Az alábbi kód például automatizál egy Unity Catalog-kötetet. Ez a példa létrehoz egy fájlt zzz_hello.txt a kötet munkaterületen belüli elérési útján, beolvassa az adatokat a fájlból, majd törli a fájlt:

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

    Feljegyzés

    Ha nem állít be argumentumokat az előző hívásban val dbutils = DBUtils.getDBUtils(), a Databricks Utilities for Scala az alapértelmezett folyamatot használja az Azure Databricks-hitelesítés végrehajtására.

    Az alapértelmezett viselkedés felülbírálásához adjon át egy példányosított DatabricksCfg objektumot argumentumként a következőnek getDBUtils: További információkért lásd az előző hitelesítési szakaszt.

    Vegye figyelembe azonban, hogy ha a kód a Databricks Runtime-ben fut, a rendszer figyelmen kívül hagyja ezt az DatabricksCfg objektumot. Ennek az az oka, hogy a Databricks Utilities for Scala delegálja a beépített Databricks Utilities-t, amikor a Databricks-futtatókörnyezeten belül fut.

  5. Készítse el a projektet, és futtassa a fő fájlt.

A Unity Catalog-kötetek eléréséhez használja files a következőn belülWorkspaceClient: . Lásd: Fájlok kezelése a Unity-katalógus köteteiben. Kötetek nem érhetők DBUtils.getDBUtils() el.

Tesztelés

A kód teszteléséhez használjon Java-tesztelési keretrendszereket, például JUnitot. Ha szimulált körülmények között szeretné tesztelni a kódot az Azure Databricks REST API-végpontok meghívása vagy az Azure Databricks-fiókok vagy -munkaterületek állapotának módosítása nélkül, használjon Java-alapú szimulált kódtárakat, például a Mockito-t.

Ha például a következő fájl neve Helpers.java egy függvényt createCluster tartalmaz, amely adatokat ad vissza az új fürtről:

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

És a függvényt meghívó createCluster következő fájlra hivatkozvaMain.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());
  }
}

A következő elnevezett HelpersTest.java fájl ellenőrzi, hogy a createCluster függvény a várt választ adja-e vissza. Ahelyett, hogy fürtöt hoz létre a cél-munkaterületen, ez a teszt egy WorkspaceClient objektumot szimulál, definiálja a kicsúsztatott objektum beállításait, majd átadja a kicsúsztatott objektumot a createCluster függvénynek. A teszt ezután ellenőrzi, hogy a függvény visszaadja-e az új szimulált fürt várt azonosítóját.

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

További erőforrások

További információk: