Programmgesteuerte Interaktion mit Arbeitsbereichsdateien

Sie können programmgesteuert mit Arbeitsbereichsdateien interagieren, die in Azure Databricks gespeichert sind. Dies ermöglicht Aufgaben wie:

  • Speichern kleiner Datendateien zusammen mit Notizbüchern und Code.
  • Schreiben von Protokolldateien in Verzeichnisse, die mit Git synchronisiert wurden.
  • Importieren von Modulen mithilfe relativer Pfade.
  • Erstellen oder Ändern einer Umgebungsspezifikationsdatei.
  • Schreiben einer Ausgabe aus Notebooks.
  • Schreiben der Ausgabe aus der Ausführung von Bibliotheken wie Tensorboard.

Sie können Arbeitsbereichsdateien programmgesteuert in Databricks Runtime 11.3 LTS und höher erstellen, bearbeiten, umbenennen und löschen. Diese Funktionalität wird für Notebooks in Databricks Runtime 16.2 und höher und der serverlose Umgebung 2 und höher unterstützt.

Hinweis

Um das Schreiben in Arbeitsbereichsdateien zu deaktivieren, legen Sie die Clusterumgebungsvariable WSFS_ENABLE_WRITE_SUPPORT=falsefest. Weitere Informationen finden Sie unter Umgebungsvariablen.

Hinweis

In Databricks Runtime 14.0 und höher ist das Standard-Arbeitsverzeichnis (CWD) für lokal ausgeführten Code das Verzeichnis, das das ausgeführte Notizbuch oder Skript enthält. Dies ist eine Änderung des Verhaltens von Databricks Runtime 13.3 LTS und darunter. Weitere Informationen finden Sie unter Was ist das aktuelle Standardarbeitsverzeichnis?.

Bei serverless Compute ist das Arbeitsverzeichnis nicht garantiert, daher sollten absolute Pfade verwendet werden, um Dateien zu referenzieren. Siehe Beschränkungen von serverlosem Computing.

Lesen der Speicherorte von Dateien

Verwenden Sie Shellbefehle, um die Speicherorte von Dateien zu lesen, z. B. in einem Repository oder im lokalen Dateisystem.

Um den Speicherort der Dateien zu ermitteln, geben Sie Folgendes ein:

%sh ls
  • Dateien befinden sich nicht in einem Repository: Der Befehl gibt das Dateisystem /databricks/driverzurück.
  • Dateien befinden sich in einem Repository: Der Befehl gibt ein virtualisiertes Repository wie /Workspace/Repos/name@domain.com/public_repo_2/repos_file_systemzurück.

Lesen von Arbeitsbereichsdatendateien

Sie können programmgesteuert kleine Dateien wie .csv oder .json aus Code in Ihren Notizbüchern lesen. Im folgenden Beispiel werden Pandas verwendet, um Dateien abzufragen, die in einem /data Verzeichnis relativ zum Stammverzeichnis des Projektrepo gespeichert sind:

import pandas as pd
df = pd.read_csv("./data/winequality-red.csv")
df

Sie können Spark verwenden, um Datendateien zu lesen. Sie müssen Spark den vollqualifizierten Pfad bereitstellen.

  • Arbeitsbereichsdateien in Git-Ordnern verwenden den Pfad file:/Workspace/Repos/<user-folder>/<repo-name>/path/to/file.
  • Arbeitsbereichsdateien in Ihrem persönlichen Verzeichnis verwenden den Pfad: file:/Workspace/Users/<user-folder>/path/to/file.

Sie können den absoluten oder relativen Pfad zu einer Datei aus dem Dropdownmenü neben der Datei kopieren:

Datei-Dropdownmenü

Das folgende Beispiel zeigt die Verwendung von {os.getcwd()}, um den vollständigen Pfad abzurufen.

import os
spark.read.format("csv").load(f"file:{os.getcwd()}/my_data.csv")

Hinweis

In Arbeitsbereichen, in denen das DBFS-Root-Verzeichnis und Mounts deaktiviert sind, können Sie auch dbfs:/Workspace verwenden, um mit Databricks-Dienstprogrammen auf Arbeitsbereichsdateien zuzugreifen. Dies erfordert Databricks Runtime 13.3 LTS oder höher. Siehe Deaktivieren Sie den Zugriff auf das DBFS-Stammverzeichnis und Einhängepunkte in Ihrem vorhandenen Azure Databricks-Arbeitsbereich.

Weitere Informationen zu Dateien auf Azure Databricks finden Sie unter Arbeiten mit Dateien auf Azure Databricks.

Programmgesteuertes Erstellen, Aktualisieren und Löschen von Dateien und Verzeichnissen

Sie können Arbeitsbereichsdateien in Azure Databricks programmgesteuert bearbeiten, ähnlich wie sie mit Dateien in einem beliebigen Standarddateisystem arbeiten.

Hinweis

In Databricks Runtime 16.2 und höher und serverlose Umgebung 2 und darüber hinaus sind alle programmgesteuerten Interaktionen mit Dateien auch für Notizbücher verfügbar. Informationen zum Konvertieren einer Datei in ein Notizbuch finden Sie unter Konvertieren einer Datei in ein Notizbuch.

Hinweis

Das übergeordnete Verzeichnis einer Datei muss bereits existieren, bevor du darauf schreibst. Azure Databricks puffert Dateischreibvorgänge und schreibt sie asynchron in den Arbeitsbereich, sodass das Schreiben in einen Pfad, dessen übergeordnetes Verzeichnis fehlt, erst nach dem Schreibaufruf mit AsyncFlushFailedException fehlschlägt, statt bereits beim Ausführen des Schreibaufrufs. Erstellen Sie zuerst das übergeordnete Verzeichnis, wie im folgenden Beispiel gezeigt.

In den folgenden Beispielen werden standardmäßige Python-Pakete und -Funktionen zum Erstellen und Bearbeiten von Dateien und Verzeichnissen verwendet.

import os

# Create a new directory

os.mkdir('dir1')

# Create a new file and write to it

with open('dir1/new_file.txt', "w") as f:
    f.write("new content")

# Append to a file

with open('dir1/new_file.txt', "a") as f:
    f.write(" continued")

# Delete a file

os.remove('dir1/new_file.txt')

# Delete a directory

os.rmdir('dir1')
import shutil

# Copy a dashboard

shutil.copy("my-dashboard.lvdash.json", "my-dashboard-copy.lvdash.json")

# Move a query to a shared folder

shutil.move("test-query.dbquery","shared-queries/")


Lösen Sie doppelte Asset-Namen auf

In manchen Fällen kann ein Arbeitsbereichsordner bereits Assets mit demselben Namen enthalten. Zum Beispiel könnten zwei SQL-Abfragen beide den Namen My querytragen. Dies kann passieren, wenn Assets erstellt wurden, bevor die Namenseinzigartigkeit vollständig durchgesetzt wurde.

Wenn ein Ordner doppelte Asset-Namen enthält, scheitert der Dateizugriff auf den Ordner, obwohl die Assets selbst unbeeinträchtigt bleiben. Sie sehen möglicherweise Fehler wie:

  • Name not unique on network (OSError: [Errno 76])—zum Beispiel, wenn Sie ls oder andere Befehle im Webterminal ausführen oder den Ordner aus einem Notizbuch auflisten.
  • File name conflict oder RESOURCE_CONFLICT: Duplicate entities detected in the directory—zum Beispiel während Git-Ordneroperationen.

Hinweis

Doppelte Namen beeinflussen die Assets selbst nicht. Du kannst jedes Asset weiterhin aus dem Arbeitsbereichsbrowser öffnen und verwenden. Nur Befehle, die über das Dateisystem den Ordner erreichen – wie das Webterminal, WSFS oder Git-Ordneroperationen – sind betroffen.

Um Assets mit doppelten Namen zu finden, führe das folgende Notebook aus. Es scannt einen Ordner und seine Unterordner und listet Assets auf, die denselben Namen haben. Das Notizbuch ist schreibgeschützt und benennt keine Assets um oder löscht sie.

Finden Sie doppelte Arbeitsbereichs-Assets

Notebook abrufen

So beheben Sie doppelte Namen mit der Arbeitsbereichs-UI:

  1. Im Arbeitsbereichsbrowser öffnen Sie jeden vom Notebook identifizierten Ordner.
  2. Umbenennen oder löschen Sie doppelte Assets, bis jedes Asset im Ordner einen eindeutigen Namen hat.

Nachdem alle Asset-Namen im Ordner eindeutig sind, funktioniert der Dateizugriff wieder.