Arbeiten mit Dateien in Azure Databricks

Azure Databricks bietet mehrere Dienstprogramme und APIs für die Interaktion mit Dateien an den folgenden Speicherorten:

  • Unity Catalog-Volumes
  • Arbeitsbereichsdateien
  • Cloudobjektspeicher
  • DBFS-Einbindungen und DBFS-Stamm
  • Kurzlebiger Speicher, der an den Treiberknoten des Clusters angefügt ist

Dieser Artikel enthält Beispiele für die Interaktion mit Dateien an diesen Speicherorten für die folgenden Tools:

  • Apache Spark
  • Spark SQL und Databricks SQL
  • Databricks-Dateisystem-Dienstprogramme (dbutils.fs oder %fs)
  • Databricks-Befehlszeilenschnittstelle
  • Databricks-Rest-API
  • Bash-Shellbefehle (%sh)
  • Installationen von Bibliotheken im Notebook-Bereich mit %pip
  • Pandas
  • OSS-Dateiverwaltungs- und -Verarbeitungsdienstprogramme von Python

Wichtig

Dateivorgänge, die FUSE-Zugriff auf Daten erfordern, können mithilfe von URIs nicht direkt auf den Cloudobjektspeicher zugreifen. Databricks empfiehlt die Verwendung von Unity Catalog-Volumes zum Konfigurieren des Zugriffs auf diese Speicherorte für FUSE.

Scala unterstützt FUSE für Unity Catalog-Volumes oder Arbeitsbereichsdateien in einer Compute-Instanz nicht, die mit Einzelbenutzer-Zugriffsmodus oder Clustern ohne Unity Catalog konfiguriert sind. Scala unterstützt FUSE für Unity Catalog-Volumes und Arbeitsbereichsdateien auf der Compute, die mit Unity-Katalog und gemeinsam genutztem Zugriffsmodus konfiguriert sind.

Muss ich ein URI-Schema für den Zugriff auf Daten bereitstellen?

Datenzugriffspfade in Azure Databricks folgen einem der folgenden Standards:

  • URI-Stilpfade enthalten ein URI-Schema. Bei Databricks-nativen Datenzugriffslösungen sind URI-Schemas für die meisten Anwendungsfälle optional. Wenn Sie direkt auf Daten im Cloudobjektspeicher zugreifen, müssen Sie das richtige URI-Schema für den Speichertyp angeben.

    Diagramm mit URI-Pfaden

  • POSIX-Formatpfade bieten Datenzugriff relativ zum Treiberstamm (/). POSIX-Stilpfade erfordern nie ein Schema. Sie können Unity Catalog-Volumes oder DBFS-Bereitstellungen verwenden, um POSIX-Stil-Zugriff auf Daten im Cloudobjektspeicher bereitzustellen. Viele ML-Frameworks und andere OSS Python-Module erfordern FUSE und können nur POSIX-Stilpfade verwenden.

    Diagramm mit POSIX-Pfaden

Arbeiten mit Dateien in Unity Catalog-Volumes

Databricks empfiehlt die Verwendung von Unity Catalog-Volumes zum Konfigurieren des Zugriffs auf nicht tabellarische Datendateien, die im Cloudobjektspeicher gespeichert sind. Weitere Informationen finden Sie unter Erstellen von und Arbeiten mit Volumes.

Tool Beispiel
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL und Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Databricks-Dateisystem-Hilfsprogramme dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Databricks-Befehlszeilenschnittstelle databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
Databricks-Rest-API POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Bash-Shellbefehle %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Bibliotheksinstallationen %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandas df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
OSS Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Hinweis

Das dbfs:/-Schema ist beim Arbeiten mit der Databricks CLI erforderlich.

Einschränkungen für Volumes

Volumes haben die folgenden Einschränkungen:

  • Keine Vorgänge zum direkten Anfügen und keine nicht sequenziellen (zufälligen) Schreibvorgänge, z. B. das Schreiben von ZIP- und Excel-Dateien werden nicht unterstützt. Führen Sie für Workloads mit direktem Anfügen oder zufälligem Schreiben die Vorgänge zuerst auf einem lokalen Datenträger aus, und kopieren Sie dann die Ergebnisse in Unity Catalog-Volumes. Zum Beispiel:

    # python
    import xlsxwriter
    from shutil import copyfile
    
    workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
    worksheet = workbook.add_worksheet()
    worksheet.write(0, 0, "Key")
    worksheet.write(0, 1, "Value")
    workbook.close()
    
    copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx')
    
  • Sparsedateien werden nicht unterstützt. Verwenden Sie zum Kopieren von Sparsedateien cp --sparse=never:

    $ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    error writing '/dbfs/sparse.file': Operation not supported
    $ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    

Arbeiten mit Arbeitsbereichsdateien

Databricks-Arbeitsbereichsdateien sind die Dateien in einem Arbeitsbereich, die keine Notebooks sind. Sie können Arbeitsbereichsdateien zum Speichern und Zugreifen auf Daten und andere Dateien verwenden, die zusammen mit Notebooks und anderen Arbeitsbereichsressourcen gespeichert wurden. Da Arbeitsbereichsdateien Größenbeschränkungen aufweisen, empfiehlt Databricks, hier nur kleine Datendateien hauptsächlich für Entwicklung und Tests zu speichern.

Tool Beispiel
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL und Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Databricks-Dateisystem-Hilfsprogramme dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Databricks-Befehlszeilenschnittstelle databricks workspace list
Databricks-Rest-API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Bash-Shellbefehle %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Bibliotheksinstallationen %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandas df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
OSS Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Hinweis

Das file:/-Schema ist erforderlich, wenn Sie mit Databricks Utilities, Apache Spark oder SQL arbeiten.

Einschränkungen für Arbeitsbereichsdateien

Arbeitsbereichsdateien haben die folgenden Einschränkungen:

  • Die Größe der Arbeitsbereichsdatei ist auf der Benutzeroberfläche auf 500 MB beschränkt. Die maximale Dateigröße, die beim Schreiben aus einem Cluster zulässig ist, beträgt 256 MB.

  • Wenn Ihr Workflow Quellcode verwendet, der sich in einem Remote-Git-Repository befindet, können Sie nicht in das aktuelle Verzeichnis schreiben oder mithilfe eines relativen Pfads schreiben. Schreiben Sie Daten in andere Speicherortoptionen.

  • Sie können beim Speichern in Arbeitsbereichsdateien keine git-Befehle verwenden. Das Erstellen von .git-Verzeichnissen ist in Arbeitsbereichsdateien nicht zulässig.

  • Es gibt eingeschränkte Unterstützung für Vorgänge für Arbeitsbereichsdateien über serverloses Computing.

  • Executors können nicht in Arbeitsbereichsdateien schreiben.

  • Symlinks werden nicht unterstützt.

  • Auf Arbeitsbereichsdateien kann nicht über benutzerdefinierte Funktionen (User-Defined Functions, UDFs) in Clustern mit dem Zugriffsmodus „Freigegeben“ zugegriffen werden.

Wo werden gelöschte Arbeitsbereichsdateien abgelegt?

Durch das Löschen einer Arbeitsbereichsdatei wird sie an den Papierkorb gesendet. Sie können Dateien über die Benutzeroberfläche entweder wiederherstellen oder endgültig aus dem Papierkorb löschen.

Weitere Informationen finden Sie unter Löschen eines Objekts

Arbeiten mit Dateien im Cloudobjektspeicher

Databricks empfiehlt die Verwendung von Unity Catalog-Volumes, um den Zugriff auf Dateien im Cloud-Objektspeicher zu konfigurieren. Wenn Sie mithilfe von URIs direkt auf Daten im Cloudobjektspeicher zugreifen möchten, müssen Sie Berechtigungen konfigurieren. Siehe Verwalten externer Standorte, externer Tabellen und externer Volumes.

Die folgenden Beispiele verwenden URIs für den Zugriff auf Daten im Cloudobjektspeicher:

Tool Beispiel
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL und Databricks SQL SELECT * FROM csv.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json`; LIST 'abfss://container-name@storage-account-name.dfs.core.windows.net/path';
Databricks-Dateisystem-Hilfsprogramme dbutils.fs.ls("abfss://container-name@storage-account-name.dfs.core.windows.net/path/") %fs ls abfss://container-name@storage-account-name.dfs.core.windows.net/path/
Databricks-Befehlszeilenschnittstelle Nicht unterstützt
Databricks-Rest-API Nicht unterstützt
Bash-Shellbefehle Nicht unterstützt
Bibliotheksinstallationen %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandas Nicht unterstützt
OSS Python Nicht unterstützt

Hinweis

Cloudobjektspeicher unterstützt kein Passthrough für Anmeldeinformationen.

Arbeiten mit Dateien in DBFS-Bereitstellungen und DBFS-Stamm

DBFS-Bereitstellungen können nicht mithilfe des Unity-Katalogs sicherungsfähig sein und werden von Databricks nicht mehr empfohlen. Auf im DBFS-Stamm gespeicherte Daten kann von allen Benutzern im Arbeitsbereich zugegriffen werden. Databricks empfiehlt, vertraulichen oder Produktionscode bzw. -daten im DBFS-Stamm zu speichern. Weitere Informationen finden Sie unter Was ist das Databricks-Dateisystem (Databricks File System, DBFS)?.

Tool Beispiel
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL und Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Databricks-Dateisystem-Hilfsprogramme dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Databricks-Befehlszeilenschnittstelle databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
Databricks-Rest-API POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Bash-Shellbefehle %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Bibliotheksinstallationen %pip install /dbfs/mnt/path/to/my_library.whl
Pandas df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
OSS Python os.listdir('/dbfs/mnt/path/to/directory')

Hinweis

Das dbfs:/-Schema ist beim Arbeiten mit der Databricks CLI erforderlich.

Arbeiten mit Dateien im kurzlebigen Speicher, der an den Treiberknoten angefügt ist

Der an den Treiberknoten angefügte kurzlebige Speicher ist Blockspeicher mit nativem POSIX-basiertem Pfadzugriff. Alle an diesem Speicherort gespeicherten Daten verschwinden, wenn ein Cluster beendet oder neu gestartet wird.

Tool Beispiel
Apache Spark Nicht unterstützt
Spark SQL und Databricks SQL Nicht unterstützt
Databricks-Dateisystem-Hilfsprogramme dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks-Befehlszeilenschnittstelle Nicht unterstützt
Databricks-Rest-API Nicht unterstützt
Bash-Shellbefehle %sh curl http://<address>/text.zip > /tmp/text.zip
Bibliotheksinstallationen Nicht unterstützt
Pandas df = pd.read_csv('/path/to/data.csv')
OSS Python os.listdir('/path/to/directory')

Hinweis

Das file:/-Schema ist beim Arbeiten mit Databricks Utilities erforderlich.

Verschieben von Daten aus dem kurzlebigen Speicher in Volumes

Möglicherweise möchten Sie auf mithilfe von Apache Spark heruntergeladene oder gespeicherte Daten im kurzlebigen Speicher zugreifen. Da der kurzlebige Speicher an den Treiber angefügt ist und Spark ein verteiltes Verarbeitungsmodul ist, können nicht alle Vorgänge hier direkt auf Daten zugreifen. Wenn Sie Daten aus dem Treiberdateisystem in Unity Catalog-Volumes verschieben müssen, können Sie Dateien mit Magic-Befehlen oder den Databricks-Dienstprogrammen kopieren, wie in den folgenden Beispielen gezeigt:

dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>