Teilen über


Arbeiten mit Dateien auf Azure Databricks

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

  • Unity-Katalogvolumes
  • Arbeitsbereichsdateien
  • Cloudobjektspeicher
  • DBFS-Einbindungen und DBFS-Stamm
  • Ephemeralspeicher, 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 Dateisystemprogramme (dbutils.fs oder %fs)
  • Databricks CLI
  • Databricks-REST-API
  • Bash-Shellbefehle (%sh)
  • Installationen von notizbuchspezifischen Bibliotheken mithilfe von %pip.
  • Pandas
  • OSS Python Dateiverwaltungs- und Verarbeitungsprogramme

Wichtig

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

Scala unterstützt FUSE für Unity-Katalogvolumes und Arbeitsbereichsdateien auf der Compute, die mit Unity-Katalog und gemeinsam genutztem Zugriffsmodus konfiguriert sind. Bei der Berechnung, die mit dem Einzelbenutzerzugriffsmodus und Databricks Runtime 14.3 und höher konfiguriert ist, unterstützt Scala FUSE für Unity-Katalogvolumes und Arbeitsbereichsdateien, mit Ausnahme von Unterprozessen, die aus Scala stammen, z. B. der Scala-Befehl "cat /Volumes/path/to/file".!!.

Spark und andere JVM-Prozesse können nur mithilfe der Leser und Autoren, die Unity Catalog unterstützen, auf Unity-Katalogvolumes oder Arbeitsbereichsdateien zugreifen. Sie können z. B. keine JAR-Datei als Abhängigkeit in einer Spark-Konfiguration angeben, und Sie können keine benutzerdefinierten PySpark-Datenquellen verwenden. Wenn Sie über eine JVM-Workload aus Bibliotheken verfügen, die auf Dateien in Volumes oder in Arbeitsbereichsdateien zugreifen müssen, kopieren Sie die Dateien mithilfe von Python- oder Shellbefehlen wie %sh mv.in den lokalen Speicher auf dem Rechner. Verwenden Sie nicht %fs oder dbutils.fs, die die JVM verwenden. Wenn eine Datei während des Clusterstarts vorhanden sein muss, verwenden Sie ein Init-Skript, um die Datei zuerst zu verschieben. Siehe Was sind Init-Skripte?.

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

Datenzugriffspfade in Azure Databricks folgen einem der folgenden Standards:

  • URI-Style-Pfade 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.

    URI-Pfaddiagramm

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

    POSIX-Pfaddiagramm

Arbeiten mit Dateien in Unity-Katalogvolumes

Databricks empfiehlt die Verwendung von Unity-Katalogvolumes zum Konfigurieren des Zugriffs auf nicht tabellarische Datendateien, die im Cloudobjektspeicher gespeichert sind. Siehe Was sind Unity-Katalogvolumes?.

Werkzeug 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/';
Dateisystemprogramme für Databricks dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Databricks CLI 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')
Open-Source-Software Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Anmerkung

Das dbfs:/ Schema ist erforderlich, wenn Sie mit der Databricks CLI arbeiten.

Volumenbeschränkungen

Volumes weisen die folgenden Einschränkungen auf:

  • Direct-Append- oder nicht sequenzielle (zufällige) Schreibvorgänge, z. B. das Schreiben von ZIP- und Excel-Dateien, werden nicht unterstützt. Führen Sie für Workloads mit direkten Anfüge- oder zufälligen Schreibvorgängen zuerst die Vorgänge auf einem lokalen Datenträger aus, und kopieren Sie die Ergebnisse dann in Unity-Katalog-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')
    
  • Sparse-Dateien werden nicht unterstützt. Verwenden Sie cp --sparse=never, um sparse Dateien zu kopieren:

    $ 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 Workspace-Dateien

Databricks Arbeitsbereichsdateien sind die Dateien in einem Arbeitsbereich, die im Arbeitsbereichsspeicherkontogespeichert sind. Sie können Arbeitsbereichsdateien verwenden, um Dateien wie Notizbücher, Quellcodedateien, Datendateien und andere Arbeitsbereichsressourcen zu speichern und darauf zuzugreifen. Da Arbeitsbereichsdateien Größenbeschränkungen aufweisen, empfiehlt Databricks, kleine Datendateien hier hauptsächlich für Entwicklung und Tests zu speichern.

Werkzeug 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-Dienstprogramme dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Databricks CLI 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')
Open-Source-Software Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Anmerkung

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

Informationen zu den Einschränkungen beim Arbeiten mit Dateien im Arbeitsbereich finden Sie unter Einschränkungen.

Wo werden gelöschte Arbeitsbereichsdateien abgelegt?

Durch das Löschen einer Arbeitsbereichsdatei wird sie in den Papierkorb verschoben. Sie können Dateien mithilfe der Benutzeroberfläche aus dem Papierkorb wiederherstellen oder endgültig löschen.

Siehe Löschen eines Objekts.

Arbeiten mit Dateien im Cloudobjektspeicher

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

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

Werkzeug 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';
Dienstprogramme des Databricks-Dateisystems 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 CLI 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

Anmerkung

Arbeiten mit Dateien in DBFS-Einhängepunkten und dem DBFS-Root-Verzeichnis

DBFS-Einbindungen können nicht mit dem Unity Catalog abgesichert werden und werden von Databricks nicht mehr empfohlen. Auf im DBFS-Stamm gespeicherte Daten können von allen Benutzern im Arbeitsbereich zugegriffen werden. Databricks rät davon ab, vertrauliche oder Produktivcodes oder -daten im DBFS-Stamm zu speichern. Siehe Was ist DBFS?.

Werkzeug 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`;
Dienstprogramme für das Databricks-Dateisystem dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Databricks CLI 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 (Open-Source-Software) Python os.listdir('/dbfs/mnt/path/to/directory')

Anmerkung

Das dbfs:/ Schema ist erforderlich, wenn Sie mit der Databricks CLI arbeiten.

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

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

Werkzeug Beispiel
Apache Spark Nicht unterstützt
Spark SQL und Databricks SQL Nicht unterstützt
Dienstprogramme des Databricks-Dateisystems dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks CLI 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')

Anmerkung

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

Daten von flüchtigem Speicher in Volumes verschieben

Möglicherweise möchten Sie mithilfe von Apache Spark auf 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. Angenommen, Sie müssen Daten aus dem Treiberdateisystem in Unity-Katalogvolumes verschieben. In diesem Fall können Sie Dateien mit Magic Commands oder den Databricks Hilfsprogrammenkopieren, 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>

Weitere Ressourcen

Informationen zum Hochladen lokaler Dateien oder zum Herunterladen von Internetdateien in Azure Databricks finden Sie unter Hochladen von Dateien in Azure Databricks.