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.
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.
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.