Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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()undnotebookutils.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()undfastcp()Vorgänge. -
Regionsübergreifende Einschränkungen:
fastcp()Unterstützt das Kopieren von Dateien in OneLake nicht über Regionen hinweg. Verwenden Sie stattdessencp(). - 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 wiefastcp(), 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
fileCacheTimeoutWert einhängen.Bei nicht standardmäßigen Lakehouse-Konfigurationen können Sie den entsprechenden
fileCacheTimeoutParameter 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 dasFiles-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 Pfadsnotebookutils.fs.ls("/lakehouse/default/Files")verwenden, um auf dasFilesVerzeichnis 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 stattdessennotebookutils.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(falsein Scala,FALSEin 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)