Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
notebookutils.fs biedt hulpprogramma's voor het werken met verschillende bestandssystemen, waaronder Azure Data Lake Storage (ADLS) Gen2 en Azure Blob Storage. Zorg ervoor dat u de toegang tot Azure Data Lake Storage Gen2 en Azure Blob Storage op de juiste manier configureert.
Voer de volgende opdrachten uit voor een overzicht van de beschikbare methoden:
notebookutils.fs.help()
De volgende tabel bevat de beschikbare bestandssysteemmethoden:
| Methode | Signature | Beschrijving |
|---|---|---|
ls |
ls(path: String): Array |
Hiermee wordt de inhoud van een map weergegeven. |
mkdirs |
mkdirs(path: String): Boolean |
Zorgt ervoor dat de opgegeven map wordt aangemaakt als deze niet bestaat, samen met eventuele benodigde bovenliggende mappen. |
cp |
cp(src: String, dest: String, recurse: Boolean = false): Boolean |
Kopieert een bestand of map, mogelijk tussen bestandssystemen. |
fastcp |
fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean |
Kopieert een bestand of map via azcopy voor betere prestaties met grote gegevensvolumes. |
mv |
mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean |
Hiermee verplaatst u een bestand of map, mogelijk tussen bestandssystemen. |
put |
put(file: String, content: String, overwrite: Boolean = false): Boolean |
Hiermee schrijft u de opgegeven tekenreeks naar een bestand, gecodeerd in UTF-8. |
head |
head(file: String, max_bytes: int = 1024 * 100): String |
Retourneert tot de eerste max_bytes bytes van het opgegeven bestand als een tekenreeks die is gecodeerd in UTF-8. |
append |
append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean |
Voegt de inhoud toe aan een bestand. |
rm |
rm(path: String, recurse: Boolean = false): Boolean |
Hiermee verwijdert u een bestand of map. |
exists |
exists(path: String): Boolean |
Controleert of er een bestand of map bestaat. |
getProperties |
getProperties(path: String): Map |
Verkrijgt de eigenschappen van het opgegeven pad. Alleen beschikbaar in Python-notebooks (niet ondersteund in PySpark, Scala of R). |
Opmerking
Alle bestandssysteemmethoden zijn beschikbaar in Python-, PySpark-, Scala- en R-notebooks, tenzij anders vermeld. Scala maakt gebruik van camelCase-parameternamen (bijvoorbeeld createPath in plaats van create_path, maxBytes in plaats van max_bytes).
Zie Bestandskoppeling en ontkoppeling voor koppel- en ontkoppelbewerkingen.
Opmerking
Houd rekening met de volgende beperkingen en overwegingen wanneer u werkt met notebookutils.fs.
-
Padgedrag varieert per type notebook: in Spark-notebooks worden relatieve paden opgelost naar het standaard Lakehouse ABFSS-pad. In Python-notebooks worden relatieve paden omgezet in de werkmap van het lokale bestandssysteem (
/home/trusted-service-user/work). -
Gelijktijdige schrijfbeperkingen:
notebookutils.fs.append()ennotebookutils.fs.put()bieden geen ondersteuning voor gelijktijdige schrijfbewerkingen naar hetzelfde bestand vanwege een gebrek aan atomiciteitsgaranties. -
Vertraging in toevoeglussen: Wanneer u
notebookutils.fs.append()in lussen gebruikt, voegt u een pauze van 0,5-1 seconde toe tussen schrijfbewerkingen voor gegevensintegriteit. -
Beperkingen voor OneLake-snelkoppelingen: voor snelkoppelingen van S3/GCS-typen gebruikt u gekoppelde paden in plaats van ABFS-paden voor
cp()enfastcp()bewerkingen. -
Beperkingen tussen regio's:
fastcp()biedt geen ondersteuning voor het kopiëren van bestanden in OneLake tussen regio's. Gebruik in plaats daarvancp(). - Runtime-versie: NotebookUtils is ontworpen voor gebruik met Spark 3.4 (Runtime v1.2) en hoger.
-
cp()gedrag in Python-notebooks: in Python-notebookscp()gebruikt u intern hetzelfde mechanisme op basis van azcopy alsfastcp(), zodat beide methoden zich identiek gedragen.
NotebookUtils werkt op dezelfde manier met het bestandssysteem als Spark-API's. Neem notebookutils.fs.mkdirs() en Lakehouse-gebruik bijvoorbeeld:
| Gebruik | Relatief pad vanaf de HDFS-root | Absoluut pad voor ABFS-bestandssysteem | Absoluut pad voor lokaal bestandssysteem in stuurprogrammaknooppunt |
|---|---|---|---|
| Niet-standaard Lakehouse | Niet ondersteund | notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
| Standaard Lakehouse | Map onder Bestanden of 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>") |
Voor de standaard Lakehouse worden bestandspaden in uw notebook gekoppeld met een standaard time-out voor de bestandscache van 120 seconden. Dit betekent dat bestanden gedurende 120 seconden in de lokale tijdelijke map van het notebook worden opgeslagen, zelfs als ze uit Lakehouse worden verwijderd. Als u de time-outregel wilt wijzigen, kunt u de standaardpaden voor Lakehouse-bestanden ontkoppelen en deze opnieuw koppelen met een andere
fileCacheTimeoutwaarde.Voor niet-standaard Lakehouse-configuraties kunt u de juiste
fileCacheTimeoutparameter instellen tijdens het bevestigen van de Lakehouse-paden. Als u de time-out instelt op 0, zorgt u ervoor dat het meest recente bestand wordt opgehaald van de Lakehouse-server.
Bestanden in een lijst weergeven
Als u de inhoud van een map wilt weergeven, gebruikt u notebookutils.fs.ls('Your directory path'). Voorbeeld:
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
De notebookutils.fs.ls() API gedraagt zich anders wanneer u een relatief pad gebruikt, afhankelijk van het type notebook.
In een Spark-notebook: het relatieve pad is relatief ten opzichte van het ABFSS-pad van Default Lakehouse.
notebookutils.fs.ls("Files")verwijst bijvoorbeeld naar deFilesmap in het standaard Lakehouse.Voorbeeld:
notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")In een Python-notebook: het relatieve pad is relatief ten opzichte van de werkmap van het lokale bestandssysteem, wat standaard is
/home/trusted-service-user/work. Daarom moet u het volledige pad gebruiken in plaats van een relatief padnotebookutils.fs.ls("/lakehouse/default/Files")om toegang te krijgen tot deFilesmap in de standaard Lakehouse.Voorbeeld:
notebookutils.fs.ls("/lakehouse/default/Files/sample_datasets/public_holidays.parquet")
Bestandseigenschappen weergeven
Gebruik notebookutils.fs.ls() dit bestand om bestandseigenschappen te controleren, zoals bestandsnaam, bestandspad, bestandsgrootte en of een item een bestand of map is.
files = notebookutils.fs.ls('Your directory path')
for file in files:
print(file.name, file.isDir, file.isFile, file.path, file.size)
Gebruik f-tekenreeksen als u meer leesbare uitvoer wilt:
files = notebookutils.fs.ls("Files/data")
for file in files:
print(f"Name: {file.name}, Size: {file.size}, IsDir: {file.isDir}, Path: {file.path}")
Nieuwe map maken
Maak een map aan als deze niet bestaat, inclusief eventuele benodigde oudermappen.
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
Bestand kopiëren
Kopieer een bestand of map tussen bestandssystemen. Stel recurse=True in om directories recursief te kopiëren.
notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)
Opmerking
Opmerking voor Python-notebook: in Python-notebookscp() wordt intern hetzelfde mechanisme op basis van azcopy gebruikt als fastcp()voor efficiënte prestaties voor beide methoden.
Vanwege de beperkingen van OneLake-snelkoppeling wordt het aanbevolen om een gekoppeld pad te gebruiken notebookutils.fs.cp() in plaats van een abfss-pad, wanneer u gegevens wilt kopiëren van een S3/GCS-typesnelkoppeling.
Aanbeveling
Controleer altijd de Booleaanse retourwaarde om te controleren of de bewerking is geslaagd. Gebruik notebookutils.fs.exists() dit om het bronpad te controleren voordat u een kopieerbewerking start.
In het volgende voorbeeld ziet u een opslagkopie over verschillende opslagtypen van de standaard Lakehouse naar een ADLS Gen2-account.
notebookutils.fs.cp(
"Files/local_data",
"abfss://<container>@<account>.dfs.core.windows.net/remote_data",
recurse=True
)
Efficiënt bestand kopiëren
Gebruik fastcp deze functie voor efficiëntere kopieerbewerkingen, met name bij grote gegevensvolumes. De recurse parameter wordt standaard ingesteld op True.
notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)
Aanbeveling
Gebruik fastcp() in plaats van cp() voor grote gegevensoverdrachten. De fastcp methode maakt gebruik van azcopy achter de schermen, wat aanzienlijk betere doorvoersnelheid biedt voor grootbestandsbewerkingen. In Python-notebooks gebruiken beide cp()fastcp() hetzelfde onderliggende mechanisme.
Houd rekening met deze overwegingen:
-
notebookutils.fs.fastcp()biedt geen ondersteuning voor het kopiëren van bestanden in OneLake tussen regio's. In dit geval kunt u in plaats daarvan gebruikennotebookutils.fs.cp(). - Vanwege de beperkingen van OneLake-snelkoppeling wordt het aanbevolen om een gekoppeld pad te gebruiken
notebookutils.fs.fastcp()in plaats van een abfss-pad, wanneer u gegevens wilt kopiëren van een S3/GCS-typesnelkoppeling.
Voorbeeld van bestandsinhoud
Ga terug naar de eerste max_bytes bytes van een bestand als een UTF-8-tekenreeks.
notebookutils.fs.head('file path', max_bytes)
Aanbeveling
Gebruik voor grote bestanden head() een geschikte max_bytes waarde om geheugenproblemen te voorkomen. De standaardwaarde is 100 kB (1024 * 100).
In het volgende voorbeeld worden de eerste 1000 bytes van een bestand gelezen:
content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)
Opmerking
De standaardwaarde voor max_bytes verschilt per taal: Python- en Scala-notebooks gebruiken 102400 (100 kB), terwijl R-notebooks 65535 (64 kB) gebruiken. In Scala heeft deze parameter de naam maxBytes.
Bestand verplaatsen
Een bestand of map verplaatsen tussen bestandssystemen.
notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)
Belangrijk
De create_path standaardparameter verschilt per runtime:
-
Spark-notebooks (PySpark, Scala, R): standaard
False(falsein Scala,FALSEin R). De bovenliggende map moet bestaan vóór de verplaatsingsbewerking. -
Python-notebooks: standaard ingesteld op
True. De bovenliggende map wordt automatisch gemaakt als deze niet bestaat.
Als u consistent gedrag in runtimes wilt garanderen, stelt u de create_path parameter expliciet in uw code in. In Scala heeft deze parameter de naam createPath.
Gebruik benoemde parameters als u duidelijkere code wilt:
notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)
Bestand schrijven
Schrijf een UTF-8-tekenreeks naar een bestand.
notebookutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it already exists
Inhoud toevoegen aan een bestand
Voeg een UTF-8-tekenreeks toe aan een bestand.
notebookutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it doesn't exist
Belangrijk
notebookutils.fs.append() en notebookutils.fs.put() bieden geen ondersteuning voor gelijktijdig schrijven naar hetzelfde bestand vanwege een gebrek aan atomiciteitsgaranties.
Wanneer u de notebookutils.fs.append API in een for lus gebruikt om naar hetzelfde bestand te schrijven, voegt u een sleep instructie van ongeveer 0,5 tot 1 seconde toe tussen de terugkerende schrijfbewerkingen. Deze aanbeveling komt doordat de interne notebookutils.fs.append-bewerking van de flush-API asynchroon is, dus een korte vertraging zorgt voor gegevensintegriteit.
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
Bestand of map verwijderen
Een bestand of map verwijderen. Stel recurse=True in om directories recursief te verwijderen.
notebookutils.fs.rm('file path', recurse=True)
Controleren of er een bestand of map bestaat
Controleer of er een bestand of map bestaat op het opgegeven pad. Het retourneert True als het pad bestaat; anders wordt het geretourneerd False.
notebookutils.fs.exists("Files/data/input.csv")
Aanbeveling
Gebruik exists() voordat u bestandsbewerkingen uitvoert om fouten te voorkomen. Controleer bijvoorbeeld of er een bronbestand bestaat voordat u het probeert te kopiëren of te verplaatsen.
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.")
Bestandseigenschappen ophalen
Eigenschappen voor een pad verkrijgen als een tabel met naam-waardeparen. Dit wordt alleen ondersteund voor Azure Blob Storage-paden.
Opmerking
De getProperties methode is alleen beschikbaar in Python-notebooks. Dit wordt niet ondersteund in Spark-notebooks (PySpark, Scala of R).
Parameters:
| Kenmerk | Typ | Verplicht | Beschrijving |
|---|---|---|---|
path |
Snaar / Touwtje | Ja | ABFS-pad naar het bestand of de map. |
Retourneert: Een woordenlijst (kaart) met metagegevenseigenschappen zoals bestandsgrootte, aanmaaktijd, laatste wijzigingstijd en inhoudstype.
properties = notebookutils.fs.getProperties("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")
print(properties)