Del via


NotebookUtils filsystemverktøy for Fabric

notebookutils.fs tilbyr verktøy for arbeid med ulike filsystemer, inkludert Azure Data Lake Storage (ADLS) Gen2 og Azure Blob Storage. Kontroller at du konfigurerer tilgang til Azure Data Lake Storage Gen2 og Azure Blob Storage på riktig måte.

Kjør følgende kommandoer for en oversikt over de tilgjengelige metodene:

notebookutils.fs.help()

Tabellen nedenfor viser tilgjengelige filsystemmetoder:

Metode Signatur Beskrivelse
ls ls(path: String): Array Lister innholdet i en katalog.
mkdirs mkdirs(path: String): Boolean Oppretter den gitte katalogen hvis den ikke eksisterer, og oppretter også nødvendige overordnede kataloger.
cp cp(src: String, dest: String, recurse: Boolean = false): Boolean Kopierer en fil eller katalog, muligens på tvers av filsystemer.
fastcp fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean Kopierer en fil eller katalog via azcopy for bedre ytelse med store datavolumer.
mv mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean Flytter en fil eller mappe, muligens på tvers av filsystemer.
put put(file: String, content: String, overwrite: Boolean = false): Boolean Skriver ut den gitte strengen til en fil, kodet i UTF-8.
head head(file: String, max_bytes: int = 1024 * 100): String Returnerer opptil de første max_bytes bytene av den gitte filen som en streng kodet i UTF-8.
append append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean Legg til innholdet i en fil.
rm rm(path: String, recurse: Boolean = false): Boolean Fjerner en fil eller katalog.
exists exists(path: String): Boolean Sjekker om en fil eller mappe eksisterer.
getProperties getProperties(path: String): Map Får egenskapene til den gitte stien. Tilgjengelig kun i Python-notatbøker (ikke støttet i PySpark, Scala eller R).

Bemerkning

Alle filsystemmetoder er tilgjengelige i Python, PySpark, Scala og R-notatbøker med mindre annet er oppgitt. Scala bruker camelCase parameternavn (for eksempel createPath i stedet for create_path, maxBytes i stedet for max_bytes).

For monterings- og avmonteringsoperasjoner, se Filmontering og avmontering.

Bemerkning

Husk følgende begrensninger og hensyn når du jobber med notebookutils.fs:

  • Stioppførsel varierer etter notatboktype: I Spark-notatbøker løses relative stier til standard Lakehouse ABFSS-sti. I Python-notatbøker løses relative stier til den lokale filsystemets arbeidsmappe (/home/trusted-service-user/work).
  • Samtidige skrivebegrensninger: notebookutils.fs.append() og notebookutils.fs.put() støtter ikke samtidige skrivinger til samme fil på grunn av mangel på atomisitetsgarantier.
  • Legge til løkkeforsinkelse: Når du bruker notebookutils.fs.append() in-løkker, legg til 0,5–1 sekunds hvile mellom skrivingene for dataintegritet.
  • OneLake snarveibegrensninger: For S3/GCS-type snarveier, bruk monterte stier i stedet for ABFS-stier for cp() og fastcp() operasjoner.
  • Begrensninger på tvers av regioner: fastcp() støtter ikke kopiering av filer i OneLake på tvers av regioner. Bruk cp() i stedet.
  • Runtime-versjon: NotebookUtils er designet for å fungere med Spark 3.4 (Runtime v1.2) og nyere.
  • cp() Atferd i Python-notatbøker: I Python-notatbøker cp() brukes internt samme azcopy-baserte mekanisme som fastcp(), så begge metodene oppfører seg identisk.

NotebookUtils fungerer med filsystemet på samme måte som Spark API-er. Ta notebookutils.fs.mkdirs() for eksempel bruken av Lakehouse:

Forbruk Relativ bane fra HDFS-rot Absolutt bane for ABFS-filsystem Absolutt bane for lokalt filsystem i drivernode
Ikke-standard Lakehouse Støttes ikke notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") notebookutils.fs.mkdirs("file:/<new_dir>")
Standard Lakehouse Katalog under 'Filer' eller 'Tabeller': 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>")
  • For standard Lakehouse er filstier montert i notatboken din med en standard filcache-tidsavslutning på 120 sekunder. Dette betyr at filer er bufret i notatbokens lokale midlertidige mappe i 120 sekunder, selv om de fjernes fra Lakehouse. Hvis du vil endre timeout-regelen, kan du avmontere standard Lakehouse-filstiene og montere dem igjen med en annen fileCacheTimeout verdi.

  • For ikke-standard Lakehouse-konfigurasjoner kan du sette riktig fileCacheTimeout parameter under montering av Lakehouse-stiene. Hvis du angir tidsavbruddet til 0, sikrer du at den nyeste filen hentes fra Lakehouse-serveren.

Liste filer

For å liste innholdet i en katalog, bruk notebookutils.fs.ls('Your directory path'). Eksempel:

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

API-et oppfører seg forskjellig når det notebookutils.fs.ls() bruker en relativ sti, avhengig av hvilken type notatbok det er.

  • I en Spark-notatblokk: Den relative banen er relativ til standard Lakehouses ABFSS-bane. notebookutils.fs.ls("Files") peker for eksempel til Files-katalogen i standard Lakehouse.

    Eksempel:

    notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")
    
  • I en Python-notatbok: Den relative stien er relativ til det lokale filsystemets arbeidskatalog, som som standard er /home/trusted-service-user/work. Derfor bør du bruke hele banen i stedet for en relativ bane notebookutils.fs.ls("/lakehouse/default/Files") for å få tilgang til Files katalogen i standard Lakehouse.

    Eksempel:

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

Vis filegenskaper

Bruk notebookutils.fs.ls() for å inspisere filegenskaper som filnavn, filsti, filstørrelse, og om et element er en fil eller katalog.

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

Bruk f-strenger hvis du vil ha mer lesbar utdata:

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

Opprett ny katalog

Opprett en katalog hvis den ikke finnes, inkludert nødvendige overordnede kataloger.

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 

Kopier fil

Kopier en fil eller mappe på tvers av filsystemer. Sett recurse=True til å kopiere kataloger rekursivt.

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

Bemerkning

Python-notatbok: I Python-notatbøker cp() brukes internt samme azcopy-baserte mekanisme som fastcp(), noe som gir effektiv ytelse for begge metodene. På grunn av begrensningene i OneLake-snarveien, anbefales det å bruke en montert sti i stedet for en abfss-sti når du må bruke notebookutils.fs.cp() den for å kopiere data fra en S3/GCS-type snarvei.

Tips

Sjekk alltid den boolske returverdien for å verifisere om operasjonen lyktes. Bruk notebookutils.fs.exists() den til å verifisere kildestien før du starter en kopieringsoperasjon.

Følgende eksempel viser en krysslagringskopi fra standard Lakehouse til en ADLS Gen2-konto:

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

Performant kopieringsfil

fastcp Bruk for mer effektive kopieringsoperasjoner, spesielt med store datavolumer. Parameteren recurse er som standard .True

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

Tips

Bruk fastcp() i stedet for cp() store dataoverføringer. Metoden fastcp bruker azcopy under panseret, som gir betydelig bedre gjennomstrømning for massefiloperasjoner. I Python-notatbøker bruker begge cp() og fastcp() samme underliggende mekanisme.

Husk disse hensynene:

  • notebookutils.fs.fastcp() støtter ikke kopiering av filer i OneLake på tvers av regioner. I dette tilfellet kan du bruke notebookutils.fs.cp() i stedet.
  • På grunn av begrensningene i OneLake-snarveien, anbefales det å bruke en montert sti i stedet for en abfss-sti når du må bruke notebookutils.fs.fastcp() den for å kopiere data fra en S3/GCS-type snarvei.

Forhåndsvis filinnhold

Returner opp til de første max_bytes bytene i en fil som en UTF-8-streng.

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

Tips

For store filer, bruk head() med en passende max_bytes verdi for å unngå minneproblemer. Standardverdien er 100 KB (1024 * 100).

Følgende eksempel leser de første 1 000 bytene av en fil:

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

Bemerkning

Standardverdien for max_bytes varierer mellom språk: Python- og Scala-notatbøker bruker 102400 (100 KB), mens R-notatbøker bruker 65535 (64 KB). I Scala kalles maxBytesdenne parameteren .

Flytt fil

Flytt en fil eller mappe på tvers av filsystemer.

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

Viktig!

Standardparameteren create_path varierer etter kjøretid:

  • Spark-notatbøker (PySpark, Scala, R): går som standard til False (false i Scala, FALSE i R). Forelderkatalogen må eksistere før flytteoperasjonen.
  • Python-notatbøker: standard er .True Foreldrekatalogen opprettes automatisk hvis den ikke eksisterer.

For å sikre konsistent oppførsel på tvers av kjøretider, sett parameteren create_path eksplisitt i koden din. I Scala kalles createPathdenne parameteren .

Bruk navngitte parametere hvis du vil ha klarere kode:

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

Skrive fil

Skriv en UTF-8-streng til en fil.

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

Tilføy innhold til en fil

Legg til en UTF-8-streng i en fil.

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

Viktig!

notebookutils.fs.append() notebookutils.fs.put() og støtter ikke samtidig skriving til samme fil på grunn av mangel på atomisitetsgarantier.

Når du bruker API-et notebookutils.fs.append i en for løkke for å skrive til samme fil, legg til en sleep setning på omtrent 0,5 til 1 sekund mellom de gjentakende skrivingene. Denne anbefalingen skyldes at notebookutils.fs.append API-ens interne flush-operasjon er asynkron, så en kort forsinkelse bidrar til å sikre dataintegritet.

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

Slette fil eller katalog

Fjern en fil eller katalog. Sett recurse=True til å fjerne kataloger rekursivt.

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

Sjekk om en fil eller katalog eksisterer

Sjekk om en fil eller mappe finnes på den angitte stien. Den returnerer True hvis stien eksisterer; ellers returnerer Falseden .

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

Tips

Bruk exists() før du utfører filoperasjoner for å forhindre feil. For eksempel, sjekk at en kildefil eksisterer før du prøver å kopiere eller flytte den.

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

Hent filegenskaper

Få egenskaper for en sti som et kart over navn-verdi-par. Det støttes kun for Azure Blob Storage-stier.

Bemerkning

Metoden getProperties er kun tilgjengelig i Python-notatbøker. Det støttes ikke i Spark-notatbøker (PySpark, Scala eller R).

Parametere:

Parameter Type Påkrevd Beskrivelse
path string Ja ABFS-sti til filen eller katalogen.

Returer: En ordbok (kart) som inneholder metadata-egenskaper som filstørrelse, opprettelsestid, sist endret tid og innholdstype.

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