Udostępnij przez


Zestaw SDK usługi Databricks dla języka Java

Uwaga

Usługa Databricks zaleca pakiety zasobów usługi Databricks do tworzenia, opracowywania, wdrażania i testowania zadań oraz innych zasobów usługi Databricks jako kodu źródłowego. Zobacz Czym są pakiety zasobów Databricks?.

Z tego artykułu dowiesz się, jak zautomatyzować operacje usługi Azure Databricks i przyspieszyć programowanie za pomocą zestawu SDK usługi Databricks dla języka Java. Ten artykuł uzupełnia zestaw SDK usługi Databricks dla języka Java README, dokumentacja interfejsu API i przykłady.

Uwaga

Ta funkcja jest dostępna w wersji beta i jest w porządku do użycia w środowisku produkcyjnym.

W okresie beta usługa Databricks zaleca przypięcie zależności od określonej pomocniczej wersji zestawu SDK usługi Databricks dla języka Java, od której zależy twój kod. Na przykład, w przypadku narzędzia Maven, można przypiąć zależności w plikach, takich jak pom.xml. Aby uzyskać więcej informacji na temat przypinania zależności, zobacz Wprowadzenie do mechanizmu zależności.

Zanim rozpoczniesz

Przed rozpoczęciem korzystania z zestawu SDK usługi Databricks dla języka Java maszyna deweloperna musi mieć następujące elementy:

  • Skonfigurowane uwierzytelnianie usługi Azure Databricks.
  • Zestaw Java Development Kit (JDK) zgodny z językiem Java 8 lub nowszym. Testowanie ciągłej integracji (CI) z wykorzystaniem SDK Databricks dla Java jest kompatybilne z wersjami Java 8, 11, 17 i 20.
  • Zalecane jest zintegrowane środowisko projektowe (IDE) zgodne z językiem Java. Usługa Databricks zaleca środowisko IntelliJ IDEA.

Rozpoczynanie pracy z zestawem SDK usługi Databricks dla języka Java

  1. W pliku projektu pom.xml poinstruuj system budowy, aby uwzględniał zależność od Databricks SDK dla Java. W tym celu dodaj następujący kod <dependency> do pom.xml istniejącej <dependencies> sekcji pliku. <dependencies> Jeśli sekcja nie istnieje jeszcze w pliku pom.xml, należy również dodać element nadrzędny <dependencies> do pliku pom.xml.

    Aby na przykład otworzyć plik projektu pom.xml w środowisku IntelliJ IDEA, kliknij Widok > Okna Narzędzi > Projekt, a następnie kliknij dwukrotnie, aby otworzyć twoja-nazwa-projektu> src > pom.xml.

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

    Uwaga

    Pamiętaj, aby zastąpić 0.0.1 najnowszą wersją zestawu SDK usługi Databricks dla języka Java. Najnowszą wersję można znaleźć w centralnym repozytorium Maven.

  2. Poleć projektowi, aby przyjął zadeklarowaną zależność od Databricks SDK dla języka Java. Na przykład w środowisku IntelliJ IDEA w oknie narzędzia Projekt kliknij prawym przyciskiem myszy węzeł główny projektu, a następnie kliknij polecenie Załaduj projekt ponownie.

  3. Dodaj kod, aby zaimportować zestaw SDK usługi Databricks dla języka Java i wyświetlić listę wszystkich klastrów w obszarze roboczym usługi Azure Databricks. Na przykład w pliku projektu Main.java kod może być następujący:

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

    Uwaga

    Nie ustawiając żadnych argumentów w poprzednim wywołaniu na WorkspaceClient w = new WorkspaceClient(), zestaw SDK usługi Databricks dla języka Java używa domyślnego procesu próby przeprowadzenia uwierzytelniania w usłudze Azure Databricks. Aby zastąpić to zachowanie domyślne, zobacz następującą sekcję uwierzytelniania .

  4. Skompiluj projekt. Aby to zrobić na przykład w środowisku IntelliJ IDEA, w menu głównym kliknij Build > Buduj projekt.

  5. Uruchom plik główny. Na przykład, aby to zrobić w środowisku IntelliJ IDEA dla pliku Main.java projektu, w menu głównym kliknij polecenie Uruchom > 'Main'.

  6. Zostanie wyświetlona lista klastrów. Na przykład w IntelliJ IDEA znajduje się to w oknie narzędzia Run. Aby wyświetlić to okno narzędzia, w menu głównym kliknij pozycję View > Tool Windows > Run.

Uwierzytelnianie zestawu SDK usługi Databricks dla języka Java przy użyciu konta lub obszaru roboczego usługi Azure Databricks

Zestaw SDK usługi Databricks dla języka Java implementuje ujednolicony standard uwierzytelniania usługi Databricks , skonsolidowane i spójne podejście architektoniczne i programowe do uwierzytelniania. Takie podejście pomaga w bardziej scentralizowanym i przewidywalnym konfigurowaniu oraz automatyzacji uwierzytelniania z użyciem usługi Azure Databricks. Umożliwia ona skonfigurowanie uwierzytelniania usługi Databricks raz, a następnie użycie tej konfiguracji w wielu narzędziach i zestawach SDK usługi Databricks bez dalszych zmian konfiguracji uwierzytelniania. Aby uzyskać więcej informacji, w tym bardziej kompletne przykłady kodu w języku Java, zobacz Ujednolicone uwierzytelnianie usługi Databricks.

Uwaga

Zestaw SDK usługi Databricks dla języka Java nie zaimplementował jeszcze uwierzytelniania za pomocą tożsamości zarządzanych platformy Azure.

Niektóre z dostępnych wzorców kodowania do inicjowania uwierzytelniania usługi Databricks przy użyciu zestawu SDK usługi Databricks dla języka Java obejmują:

  • Użyj domyślnego uwierzytelniania usługi Databricks, wykonując jedną z następujących czynności:

    • Utwórz lub zidentyfikuj niestandardowy profil konfiguracji usługi Databricks z wymaganymi polami dla docelowego typu uwierzytelniania usługi Databricks. Następnie ustaw zmienną środowiskową DATABRICKS_CONFIG_PROFILE na nazwę niestandardowego profilu konfiguracji.
    • Ustaw wymagane zmienne środowiskowe dla docelowego typu uwierzytelniania usługi Databricks.

    Następnie utwórz, na przykład, obiekt WorkspaceClient z domyślnym uwierzytelnianiem usługi Databricks w następujący sposób:

    import com.databricks.sdk.WorkspaceClient;
    // ...
    WorkspaceClient w = new WorkspaceClient();
    // ...
    
  • Kodowanie na stałe wymaganych pól jest obsługiwane, ale nie jest zalecane, ponieważ ryzykuje ujawnienie poufnych informacji w kodzie, takich jak osobiste tokeny dostępu usługi Azure Databricks. Poniższy przykład ustawia na stałe wartości hostów i tokenów dostępu Azure Databricks na potrzeby uwierzytelniania za pomocą tokenu w Databricks.

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

Zobacz również Uwierzytelnianie w pliku README zestawu SDK usługi Databricks dla języka Java.

Używanie narzędzi usługi Databricks i języka Java z zestawem SDK usługi Databricks dla języka Java

Databricks Utilities udostępniają kilka funkcji pomocniczych, które ułatwiają wydajną pracę z magazynem obiektów, łańcuchowanie i parametryzowanie notebooków oraz pracę z tajnymi danymi. Usługa Databricks udostępnia bibliotekę Databricks Utilities for Scala , którą można wywołać za pomocą kodu Java, aby umożliwić programowy dostęp do narzędzi usługi Databricks.

Aby użyć kodu Java do wywołania narzędzi usługi Databricks dla języka Scala, wykonaj następujące czynności:

  1. W projekcie Java zadeklaruj zależność od zestawu SDK usługi Databricks dla języka Java, zgodnie z opisem w poprzedniej sekcji.

  2. Zadeklaruj zależność od biblioteki Databricks Utilities for Scala. W tym celu dodaj następujący kod <dependency> do pom.xml istniejącej <dependencies> sekcji pliku:

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

    Uwaga

    Pamiętaj, aby zastąpić 0.1.4 najnowszą wersją biblioteki Databricks Utilities for Scala. Najnowszą wersję można znaleźć w centralnym repozytorium Maven.

  3. Skonfiguruj projekt, aby dodać zadeklarowaną zależność na narzędzia Databricks w języku Scala. Na przykład w środowisku IntelliJ IDEA, w oknie narzędziowym Projekt, kliknij główny węzeł projektu, a następnie kliknij pozycję Maven Reload Project>.

  4. Dodaj kod w celu zaimportowania, a następnie wywołaj narzędzie databricks dla języka Scala. Na przykład poniższy kod automatyzuje zasób Unity Catalog. W tym przykładzie tworzony jest plik o nazwie zzz_hello.txt w ścieżce woluminu w obszarze roboczym, odczytuje dane z pliku, a następnie usuwa plik:

    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. Skompiluj projekt i uruchom plik główny.

Przykłady kodu

W poniższych przykładach kodu pokazano, jak używać zestawu SDK usługi Databricks dla języka Java do tworzenia i usuwania klastrów, tworzenia zadań i wyświetlania listy grup na poziomie konta. Te przykłady kodu używają zestawu SDK usługi Databricks do domyślnego procesu uwierzytelniania usługi Azure Databricks w języku Java.

Aby uzyskać dodatkowe przykłady kodu, zobacz folder examples w repozytorium Zestawu SDK usługi Databricks dla języka Java w usłudze GitHub.

Tworzenie klastra

Ten przykładowy kod tworzy klaster z określoną wersją środowiska Databricks Runtime i typem węzła klastra. Ten klaster ma jeden węzeł roboczy, a klaster zostanie automatycznie wyłączony po upływie 15 minut bezczynności.

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

Tworzenie klastra z określoną wersją zestawu JDK

Możesz utworzyć klaster, który korzysta z określonej wersji zestawu Java Development Kit (JDK).

Uwaga

  • W przypadku środowiska Databricks Runtime 18.0 zestaw JDK 21 jest ogólnie dostępny, a wartość domyślna to JDK 17 jako opcja rezerwowa.
  • W przypadku środowiska Databricks Runtime 17.3 zestaw JDK 21 jest w publicznej wersji zapoznawczej, a zestaw JDK 17 jest domyślny.
  • W przypadku środowiska Databricks Runtime 16.0 lub nowszego zestaw JDK 17 jest ogólnie dostępny i domyślny.
  • W przypadku środowiska Databricks Runtime w wersji 13.1 do 15.4 zestaw JDK 8 jest domyślny, a zestaw JDK 17 jest w publicznej wersji zapoznawczej.

Podczas tworzenia klastra określ, że klaster używa zestawu JDK 17 lub JDK 21 zarówno dla sterownika, jak i funkcji wykonawczej, dodając następującą zmienną środowiskową do opcji zaawansowanych > Zmiennych środowiskowych platformy Spark>.

Dla zestawu JDK 17:

JNAME=zulu17-ca-amd64

Dla JDK 21:

JNAME=zulu21-ca-amd64

Trwałe usuwanie klastra

Ten przykład kodu trwale usuwa klaster z określonym identyfikatorem klastra z obszaru roboczego.

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

Utwórz zadanie

Ten przykładowy kod tworzy zadanie usługi Azure Databricks, które może służyć do uruchamiania określonego notesu w określonym klastrze. Podczas wykonywania tego kodu uzyskuje on ścieżkę istniejącego notatnika, istniejący identyfikator klastra oraz powiązane ustawienia zadania od użytkownika w terminalu.

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

Zarządzanie plikami w wolumenach Unity Catalog

W tym przykładzie kodu pokazano różne wywołania funkcji w , aby uzyskać dostęp do woluminukatalogu 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);
  }
}

Wyświetlanie listy grup na poziomie konta

Ten przykładowy kod zawiera listę nazw wyświetlanych dla wszystkich dostępnych grup na koncie usługi 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());
    }
  }
}

Używanie języka Scala z zestawem SDK usługi Databricks dla języka Java

Możesz używać projektów w języku Scala z SDK Databricks przeznaczonym dla Javy. Przed rozpoczęciem komputer deweloperski musi mieć zainstalowane:

  • Skonfigurowane uwierzytelnianie usługi Azure Databricks.
  • Zalecane jest zintegrowane środowisko projektowe (IDE) zgodne ze standardem Scala. Usługa Databricks zaleca środowisko IntelliJ IDEA z wtyczką Scala. Te instrukcje zostały przetestowane w środowisku IntelliJ IDEA Community Edition 2023.3.6. Jeśli używasz innej wersji lub wydania środowiska IntelliJ IDEA, poniższe instrukcje mogą się różnić.
  • Zestaw Java Development Kit (JDK) zgodny z językiem Java 8 lub nowszym. Jeśli chcesz uruchamiać aplikacje lub używać bibliotek w klastrze usługi Azure Databricks, usługa Databricks zaleca użycie wersji zestawu JDK zgodnej z wersją zestawu JDK w klastrze. Aby znaleźć wersję zestawu JDK dołączoną do określonego środowiska Databricks Runtime, zobacz Databricks Runtime release notes versions and compatibility (Wersje i zgodność środowiska Databricks Runtime). Jeśli używasz środowiska IntelliJ IDEA, możesz wybrać istniejącą lokalną instalację zestawu JDK lub zainstalować nowy zestaw JDK lokalnie podczas tworzenia projektu Scala.
  • Narzędzie kompilacji Języka Scala. Databricks zaleca sbt. Jeśli używasz środowiska IntelliJ IDEA, możesz wybrać sbt wersję do użycia podczas tworzenia projektu Scala.
  • Scala. Jeśli chcesz uruchamiać aplikacje lub używać bibliotek w klastrze usługi Azure Databricks, usługa Databricks zaleca użycie wersji języka Scala zgodnej z wersją języka Scala w klastrze. Aby znaleźć wersję języka Scala dołączoną do określonego środowiska Databricks Runtime, zobacz Databricks Runtime release notes versions and compatibility (Wersje i zgodność środowiska Databricks Runtime). Jeśli używasz środowiska IntelliJ IDEA, możesz wybrać wersję języka Scala do użycia podczas tworzenia projektu Scala.

Aby skonfigurować, skompilować i uruchomić projekt Scala:

  1. W pliku projektu build.sbt utwórz zależność od biblioteki zestawu SDK usługi Databricks dla języka Java, dodając następujący wiersz na końcu pliku, a następnie zapisz plik:

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

    Uwaga

    Pamiętaj, aby zastąpić 0.2.0 najnowszą wersją zestawu SDK usługi Databricks dla języka Java. Najnowszą wersję można znaleźć w centralnym repozytorium Maven.

  2. Poleć projektowi, aby przyjął zadeklarowaną zależność od Databricks SDK dla języka Java. Na przykład w środowisku IntelliJ IDEA kliknij ikonę powiadomienia Załaduj zmiany sbt.

  3. Dodaj kod, aby zaimportować zestaw SDK usługi Databricks dla języka Java i wyświetlić listę wszystkich klastrów w obszarze roboczym usługi Azure Databricks. Na przykład w pliku projektu Main.scala kod może być następujący:

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

    Uwaga

    Nie ustawiając żadnych argumentów w poprzednim wywołaniu na val w = new WorkspaceClient(), zestaw SDK usługi Databricks dla języka Java używa domyślnego procesu próby przeprowadzenia uwierzytelniania w usłudze Azure Databricks. Aby zastąpić to zachowanie domyślne, zobacz następującą sekcję uwierzytelniania .

  4. Skompiluj projekt. Aby to zrobić na przykład w środowisku IntelliJ IDEA, w menu głównym kliknij Build > Buduj projekt.

  5. Uruchom plik główny. Na przykład, aby to zrobić w środowisku IntelliJ IDEA dla pliku projektu Main.scala, w menu głównym kliknij polecenie >.

  6. Zostanie wyświetlona lista klastrów. Na przykład w IntelliJ IDEA znajduje się to w oknie narzędzia Run. Aby wyświetlić to okno narzędzia, w menu głównym kliknij pozycję View > Tool Windows > Run.

Używanie narzędzi usługi Databricks i języka Scala z zestawem SDK usługi Databricks dla języka Java

Databricks Utilities udostępniają kilka funkcji pomocniczych, które ułatwiają wydajną pracę z magazynem obiektów, łańcuchowanie i parametryzowanie notebooków oraz pracę z tajnymi danymi. Usługa Databricks udostępnia bibliotekę Narzędzi usługi Databricks dla języka Scala , aby umożliwić programowy dostęp do narzędzi usługi Databricks za pomocą języka Scala.

Aby wywołać narzędzia databricks dla języka Scala, wykonaj następujące czynności:

  1. W projekcie Scala zadeklaruj zależność od zestawu SDK usługi Databricks dla języka Java, zgodnie z opisem w poprzedniej sekcji.

  2. Zadeklaruj zależność od biblioteki Databricks Utilities for Scala. Na przykład w pliku projektu build.sbt dodaj następujący wiersz na końcu pliku, a następnie zapisz plik:

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

    Uwaga

    Pamiętaj, aby zastąpić 0.1.4 najnowszą wersją biblioteki Databricks Utilities for Scala. Najnowszą wersję można znaleźć w centralnym repozytorium Maven.

  3. Skonfiguruj projekt, aby dodać zadeklarowaną zależność na narzędzia Databricks w języku Scala. Na przykład w środowisku IntelliJ IDEA kliknij ikonę powiadomienia Załaduj zmiany sbt.

  4. Dodaj kod w celu zaimportowania, a następnie wywołaj narzędzie databricks dla języka Scala. Na przykład poniższy kod automatyzuje zasób Unity Catalog. W tym przykładzie tworzony jest plik o nazwie zzz_hello.txt w ścieżce woluminu w obszarze roboczym, odczytuje dane z pliku, a następnie usuwa plik:

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

    Uwaga

    Nie ustawiając żadnych argumentów w poprzednim wywołaniu metody val dbutils = DBUtils.getDBUtils(), narzędzie Databricks Utilities for Scala używa domyślnego procesu do próby przeprowadzenia uwierzytelniania usługi Azure Databricks.

    Aby zastąpić to zachowanie domyślne, przekaż wystąpienie DatabricksCfg obiektu jako argument do getDBUtils klasy. Aby uzyskać więcej informacji, zobacz poprzednią sekcję uwierzytelniania .

    Należy jednak pamiętać, że jeśli kod działa wewnątrz środowiska Databricks Runtime, ten DatabricksCfg obiekt jest ignorowany. Dzieje się tak, ponieważ Narzędzia Databricks dla Scali odwołują się do wbudowanych narzędzi Databricks podczas uruchamiania wewnątrz środowiska Databricks Runtime.

  5. Skompiluj projekt i uruchom plik główny.

Aby uzyskać dostęp do woluminów katalogu Unity, użyj files w WorkspaceClient. Zobacz Zarządzanie plikami w woluminach Unity Catalog. Do uzyskiwania dostępu do woluminów nie można użyć DBUtils.getDBUtils().

Testowanie

Aby przetestować kod, użyj platform testowych Java, takich jak JUnit. Aby przetestować kod w symulowanych warunkach bez wywoływania punktów końcowych interfejsu API REST usługi Azure Databricks lub zmieniania stanu kont lub obszarów roboczych usługi Azure Databricks, użyj bibliotek pozorujących języka Java, takich jak Mockito.

Na przykład, biorąc pod uwagę następujący plik o nazwie Helpers.java, zawierający funkcję, która zwraca informacje o nowym klastrze:

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

I biorąc pod uwagę następujący plik o nazwie Main.java, który wywołuje funkcję 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());
  }
}

Poniższy plik o nazwie HelpersTest.java testuje, czy createCluster funkcja zwraca oczekiwaną odpowiedź. Zamiast tworzyć klaster w docelowym obszarze roboczym, ten test mockuje WorkspaceClient obiekt, definiuje mockowane ustawienia obiektu, a następnie przekazuje mockowany obiekt do createCluster funkcji. Następnie test sprawdza, czy funkcja zwraca oczekiwany identyfikator nowego wyśmiewanego klastra.

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

Rozwiązywanie problemów

W tej sekcji opisano rozwiązania typowych problemów z zestawem SDK usługi Databricks dla języka Java.

Aby zgłosić problemy lub inne opinie, utwórz zgłoszenie GitHub dla SDK Databricks dla Javy.

Błąd: Nie można przeanalizować odpowiedzi

Jeśli podczas próby użycia zestawu SDK usługi Databricks dla języka Java wystąpi następujący błąd, prawie zawsze wskazuje to problem z konfiguracją uwierzytelniania.

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

Jeśli wystąpi ten błąd, sprawdź następujące kwestie:

  • Upewnij się, że host usługi Databricks jest poprawnie ustawiony.
  • Upewnij się, że metoda uwierzytelniania ma wymagane uprawnienia do operacji interfejsu API, którą próbujesz wykonać.
  • Jeśli znajdujesz się za firmową zaporą, upewnij się, że nie blokuje ani nie przekierowuje ruchu interfejsu API.

Częstą przyczyną tego błędu jest przekierowanie zestawu SDK na stronę logowania, której zestaw SDK nie potrafi przetworzyć. Dzieje się tak zwykle w przypadku próby uzyskania dostępu do obszaru roboczego z włączonym łączem prywatnym, skonfigurowanego bez dostępu do publicznego Internetu, z innej sieci niż ta, do której należy punkt końcowy VPC.

Aby uzyskać więcej informacji, zobacz:

Dodatkowe zasoby

Aby uzyskać więcej informacji, zobacz: