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