Freigeben über


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-Hilfsprogramme (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-Datenzugriff erfordern, können nicht über URIs 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 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 Catalog-Volumes und Arbeitsbereichsdateien, mit Ausnahme von Unterprozessen, die aus Scala stammen, z. B. der Scala-Befehl "cat /Volumes/path/to/file".!!.

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 Was sind Unity Catalog-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 Arbeitsbereichen, 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.

Die Einschränkungen beim Arbeiten mit Arbeitsbereichsdateien finden Sie unter "Einschränkungen".

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 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 unter Was ist 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 integriertem 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. Nehmen Sie an, dass Sie Daten aus dem Treiberdateisystem in Unity Catalog-Volumes verschieben müssen. In diesem Fall können Sie Dateien mit Magic-Befehlen oder den Databricks-Dienstprogrammen kopieren, wie in den folgenden Beispielen:

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>

Zusätzliche Ressourcen

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