Freigeben über


NotebookUtils-Dateisystemprogramme für Fabric

notebookutils.fs stellt Dienstprogramme für die Arbeit mit verschiedenen Dateisystemen bereit, einschließlich Azure Data Lake Storage (ADLS) Gen2 und Azure Blob Storage. Stellen Sie sicher, dass Sie den Zugriff auf Azure Data Lake Storage Gen2 und Azure Blob Storage entsprechend konfigurieren.

Führen Sie die folgenden Befehle aus, um eine Übersicht über die verfügbaren Methoden zu erhalten:

notebookutils.fs.help()

In der folgenden Tabelle sind die verfügbaren Dateisystemmethoden aufgeführt:

Methode Signature Beschreibung
ls ls(path: String): Array Listet den Inhalt eines Verzeichnisses auf.
mkdirs mkdirs(path: String): Boolean Erstellt das angegebene Verzeichnis, falls es nicht vorhanden ist, und erstellt auch alle erforderlichen übergeordneten Verzeichnisse.
cp cp(src: String, dest: String, recurse: Boolean = false): Boolean Kopiert eine Datei oder ein Verzeichnis, möglicherweise über Dateisysteme hinweg.
fastcp fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean Kopiert eine Datei oder ein Verzeichnis über Azcopy, um eine bessere Leistung mit großen Datenvolumes zu erzielen.
mv mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean Verschiebt eine Datei oder ein Verzeichnis, möglicherweise über Dateisysteme hinweg.
put put(file: String, content: String, overwrite: Boolean = false): Boolean Schreibt die angegebene Zeichenfolge in eine Datei, verschlüsselt in UTF-8.
head head(file: String, max_bytes: int = 1024 * 100): String Gibt bis zu den ersten max_bytes Bytes der angegebenen Datei als in UTF-8 codierte Zeichenfolge zurück.
append append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean Fügt den Inhalt an eine Datei an.
rm rm(path: String, recurse: Boolean = false): Boolean Entfernt eine Datei oder ein Verzeichnis.
exists exists(path: String): Boolean Überprüft, ob eine Datei oder ein Verzeichnis vorhanden ist.
getProperties getProperties(path: String): Map Ruft die Eigenschaften des angegebenen Pfads ab. Nur in Python-Notizbüchern verfügbar (nicht unterstützt in PySpark, Scala oder R).

Hinweis

Alle Dateisystemmethoden sind in Python-, PySpark-, Scala- und R-Notizbüchern verfügbar, sofern nicht anders angegeben. Scala verwendet CamelCase Parameternamen (z. B. createPath anstelle von create_path, maxBytes anstelle von max_bytes).

Informationen zu Einhänge- und Aushängevorgängen finden Sie unter Dateieinhängen und -aushängen.

Hinweis

Beachten Sie bei der Arbeit mit notebookutils.fsden folgenden Einschränkungen und Überlegungen:

  • Das Pfadverhalten variiert je nach Notizbuchtyp: In Spark-Notizbüchern werden relative Pfade in den standardmäßigen Lakehouse ABFSS-Pfad aufgelöst. In Python-Notizbüchern werden relative Pfade in das arbeitsverzeichnis des lokalen Dateisystems aufgelöst (/home/trusted-service-user/work).
  • Einschränkungen für gleichzeitige Schreibvorgänge: notebookutils.fs.append() und notebookutils.fs.put() unterstützen keine gleichzeitigen Schreibvorgänge in derselben Datei aufgrund fehlender Atomizitätsgarantien.
  • Schleifenverzögerung: Wenn Sie notebookutils.fs.append() in Schleifen verwenden, legen Sie eine Pause von 0,5-1 Sekunden zwischen den Schreibvorgängen ein, um die Datenintegrität zu gewährleisten.
  • Einschränkungen für OneLake-Verknüpfungen: Verwenden Sie für S3/GCS-Typverknüpfungen eingehängte Pfade anstelle von ABFS-Pfaden für cp() und fastcp() Vorgänge.
  • Regionsübergreifende Einschränkungen: fastcp() Unterstützt das Kopieren von Dateien in OneLake nicht über Regionen hinweg. Verwenden Sie stattdessen cp().
  • Laufzeitversion: NotebookUtils ist für die Arbeit mit Spark 3.4 (Runtime v1.2) und höher konzipiert.
  • cp() Verhalten in Python-Notizbüchern: In Python-Notizbücherncp() verwendet intern den gleichen azcopy-basierten Mechanismus wie fastcp(), sodass sich beide Methoden identisch verhalten.

NotebookUtils funktioniert mit dem Dateisystem auf die gleiche Weise wie Spark-APIs. Nehmen Sie zum Beispiel die Nutzung von notebookutils.fs.mkdirs() und Lakehouse:

Verwendung Relativer Pfad vom HDFS-Stamm Absoluter Pfad für das ABFS-Dateisystem Absoluter Pfad für das lokale Dateisystem auf dem Treiberknoten
Nicht standardmäßiges Lakehouse Nicht unterstützt notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") notebookutils.fs.mkdirs("file:/<new_dir>")
Standardseehaus Verzeichnis unter "Dateien" oder "Tabellen": notebookutils.fs.mkdirs("Files/<new_dir>") notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") notebookutils.fs.mkdirs("file:/<new_dir>")
  • Für das Standard-Lakehouse werden Dateipfade in Ihrem Notizbuch mit einem Standardtimeout für den Dateicache von 120 Sekunden bereitgestellt. Dies bedeutet, dass Dateien im lokalen temporären Ordner des Notizbuchs für 120 Sekunden zwischengespeichert werden, auch wenn sie aus dem Lakehouse entfernt werden. Wenn Sie die Timeoutregel ändern möchten, können Sie die standardmäßigen Lakehouse-Dateipfade aushängen und sie erneut mit einem anderen fileCacheTimeout Wert einhängen.

  • Bei nicht standardmäßigen Lakehouse-Konfigurationen können Sie den entsprechenden fileCacheTimeout Parameter während der Montage der Lakehouse-Pfade festlegen. Durch Festlegen des Timeouts auf 0 wird sichergestellt, dass die neueste Datei vom Lakehouse-Server abgerufen wird.

Dateien auflisten

Um den Inhalt eines Verzeichnisses auflisten zu können, verwenden Sie notebookutils.fs.ls('Your directory path'). Beispiel:

notebookutils.fs.ls("Files/tmp") # Relative path works with different base paths depending on notebook type
notebookutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")  # Absolute path using ABFS file system
notebookutils.fs.ls("file:/tmp")  # Full path of the local file system of driver node

Die notebookutils.fs.ls() API verhält sich bei Verwendung eines relativen Pfads je nach Notizbuchtyp anders.

  • In einem Spark-Notebook: Der relative Pfad ist relativ zum ABFSS-Pfad des Standard-Lakehouse. Beispielsweise verweist notebookutils.fs.ls("Files") auf das Files-Verzeichnis im Standard-Lakehouse.

    Beispiel:

    notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")
    
  • In einem Python-Notizbuch: Der relative Pfad ist relativ zum Arbeitsverzeichnis des lokalen Dateisystems, das standardmäßig lautet /home/trusted-service-user/work. Daher sollten Sie den vollständigen Pfad anstelle eines relativen Pfads notebookutils.fs.ls("/lakehouse/default/Files") verwenden, um auf das Files Verzeichnis im Standard-Lakehouse zuzugreifen.

    Beispiel:

    notebookutils.fs.ls("/lakehouse/default/Files/sample_datasets/public_holidays.parquet")
    

Anzeigen von Dateieigenschaften

Verwenden Sie notebookutils.fs.ls(), um Dateieigenschaften wie Dateiname, Dateipfad, Dateigröße und zu überprüfen, ob ein Element eine Datei oder ein Verzeichnis ist.

files = notebookutils.fs.ls('Your directory path')
for file in files:
    print(file.name, file.isDir, file.isFile, file.path, file.size)

Verwenden Sie f-Zeichenfolgen, wenn Sie eine besser lesbare Ausgabe wünschen:

files = notebookutils.fs.ls("Files/data")
for file in files:
    print(f"Name: {file.name}, Size: {file.size}, IsDir: {file.isDir}, Path: {file.path}")

Neues Verzeichnis erstellen

Erstellen Sie ein Verzeichnis, wenn es nicht vorhanden ist, einschließlich aller erforderlichen übergeordneten Verzeichnisse.

notebookutils.fs.mkdirs('new directory name')  
notebookutils.fs.mkdirs("Files/<new_dir>")  # Works with the default Lakehouse files using relative path 
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>")  # Based on ABFS file system 
notebookutils.fs.mkdirs("file:/<new_dir>")  # Based on local file system of driver node 

Datei kopieren

Kopieren Sie eine Datei oder ein Verzeichnis über Dateisysteme hinweg. Setzen Sie recurse=True , um Verzeichnisse rekursiv zu kopieren.

notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)

Hinweis

Python-Notizbuchnotiz: In Python-Notizbüchern cp() verwendet intern denselben azcopy-basierten Mechanismus wie fastcp(), der eine effiziente Leistung für beide Methoden bietet. Aufgrund der Einschränkungen der OneLake-Verknüpfung wird empfohlen, Daten von einer S3/GCS-Typverknüpfung zu kopieren und dabei einen bereitgestellten Pfad anstelle eines abfss-Pfads zu verwenden.

Tipp

Überprüfen Sie immer den booleschen Rückgabewert, um zu überprüfen, ob der Vorgang erfolgreich war. Verwenden Sie notebookutils.fs.exists(), um den Quellpfad zu überprüfen, bevor Sie einen Kopiervorgang starten.

Das folgende Beispiel zeigt eine speicherübergreifende Kopie von einem Standard-Lakehouse zu einem ADLS-Gen2-Konto.

notebookutils.fs.cp(
    "Files/local_data",
    "abfss://<container>@<account>.dfs.core.windows.net/remote_data",
    recurse=True
)

Effizientes Kopieren von Dateien

Benutzen Sie fastcp für effizientere Kopiervorgänge, insbesondere bei großen Datenvolumen. Der recurse Parameter ist standardmäßig auf True.

notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)

Tipp

Verwenden Sie fastcp() statt cp() für große Datenübertragungen. Die fastcp Methode verwendet Azcopy unter der Haube, was einen deutlich besseren Durchsatz für Massendateivorgänge bietet. In Python-Notizbüchern verwenden sowohl cp() als auch fastcp() denselben zugrunde liegenden Mechanismus.

Berücksichtigen Sie dabei Folgendes:

  • notebookutils.fs.fastcp() unterstützt das Kopieren von Dateien in OneLake nicht über Regionen hinweg. In diesem Fall können Sie stattdessen notebookutils.fs.cp() verwenden.
  • Aufgrund der Einschränkungen der OneLake-Verknüpfung wird empfohlen, Daten von einer S3/GCS-Typverknüpfung zu kopieren und dabei einen bereitgestellten Pfad anstelle eines abfss-Pfads zu verwenden.

Vorschau von Dateiinhalt anzeigen

Gibt bis zu den ersten max_bytes Bytes einer Datei als UTF-8-Zeichenfolge zurück.

notebookutils.fs.head('file path', max_bytes)

Tipp

Verwenden Sie für große Dateien head() mit einem geeigneten max_bytes-Wert, um Speicherprobleme zu vermeiden. Der Standardwert ist 100 KB (1024 * 100).

Im folgenden Beispiel werden die ersten 1.000 Bytes einer Datei gelesen:

content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)

Hinweis

Der Standardwert für max_bytes unterscheidet sich je nach Sprache: Python- und Scala-Notizbücher verwenden 102400 (100 KB), während R-Notizbücher 65535 (64 KB) verwenden. In Scala wird dieser Parameter benannt maxBytes.

Datei verschieben

Verschieben einer Datei oder eines Verzeichnisses über Dateisysteme hinweg.

notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)

Von Bedeutung

Der create_path Parameterstandard variiert je nach Laufzeit:

  • Spark-Notebooks (PySpark, Scala, R): Vorgabewert ist False (false in Scala, FALSE in R). Das übergeordnete Verzeichnis muss vor dem Verschiebungsvorgang vorhanden sein.
  • Python-Notizbücher: standardmäßig auf True. Das übergeordnete Verzeichnis wird automatisch angelegt, wenn es nicht vorhanden ist.

Um ein einheitliches Verhalten über Laufzeiten hinweg sicherzustellen, legen Sie den create_path Parameter in Ihrem Code explizit fest. In Scala wird dieser Parameter benannt createPath.

Verwenden Sie benannte Parameter, wenn Sie klareren Code benötigen:

notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)

Datei schreiben

Schreiben Sie eine UTF-8-Zeichenfolge in eine Datei.

notebookutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it already exists

Inhalt an eine Datei anfügen

Fügen Sie eine UTF-8-Zeichenfolge an eine Datei an.

notebookutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it doesn't exist

Von Bedeutung

Aufgrund fehlender Atomizitätsgarantien unterstützen notebookutils.fs.append() und notebookutils.fs.put() das gleichzeitige Schreiben in derselben Datei nicht.

Wenn Sie die notebookutils.fs.append API in einer for Schleife zum Schreiben in dieselbe Datei verwenden, fügen Sie eine sleep Anweisung von ca. 0,5 bis 1 Sekunde zwischen den wiederkehrenden Schreibvorgängen hinzu. Diese Empfehlung liegt daran, dass der interne notebookutils.fs.append-Vorgang der flush-API asynchron ist, sodass eine kurze Verzögerung die Datenintegrität gewährleistet.

import time

for i in range(100):
    notebookutils.fs.append("Files/output/data.txt", f"Line {i}\n", True)
    time.sleep(0.5)  # Prevent data integrity issues

Datei oder Verzeichnis löschen

Entfernen sie eine Datei oder ein Verzeichnis. Legen Sie fest recurse=True , dass Verzeichnisse rekursiv entfernt werden.

notebookutils.fs.rm('file path', recurse=True) 

Überprüfen, ob eine Datei oder ein Verzeichnis vorhanden ist

Überprüfen Sie, ob eine Datei oder ein Verzeichnis im angegebenen Pfad vorhanden ist. Es wird zurückgegeben True , wenn der Pfad vorhanden ist; andernfalls wird er zurückgegeben False.

notebookutils.fs.exists("Files/data/input.csv")

Tipp

Verwenden Sie exists() vor dem Ausführen von Dateivorgängen, um Fehler zu vermeiden. Überprüfen Sie beispielsweise, ob eine Quelldatei vorhanden ist, bevor Sie versuchen, sie zu kopieren oder zu verschieben.

if notebookutils.fs.exists("Files/data/input.csv"):
    notebookutils.fs.cp("Files/data/input.csv", "Files/backup/input.csv")
    print("File copied successfully.")
else:
    print("Source file not found.")

Abrufen von Dateieigenschaften

Eigenschaften eines Pfads in Form eines Name-Wert-Paare-Maps abrufen. Es wird nur für Azure Blob Storage-Pfade unterstützt.

Hinweis

Die getProperties Methode ist nur in Python-Notizbüchern verfügbar. Sie wird in Spark-Notizbüchern (PySpark, Scala oder R) nicht unterstützt.

Parameter:

Parameter Typ Erforderlich Beschreibung
path String Ja ABFS-Pfad zur Datei oder zum Verzeichnis.

Rückgabe: Ein Wörterbuch (Map), das Metadateneigenschaften enthält, z. B. Dateigröße, Erstellungszeit, Zeitpunkt der letzten Änderung und Inhaltstypus.

properties = notebookutils.fs.getProperties("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")
print(properties)