Del via


NotebookUtils filsystemværktøjer til Fabric

notebookutils.fs tilbyder værktøjer til arbejde med forskellige filsystemer, herunder Azure Data Lake Storage (ADLS) Gen2 og Azure Blob Storage. Sørg for at konfigurere adgang til Azure Data Lake Storage Gen2 og Azure Blob Storage korrekt.

Kør følgende kommandoer for at få en oversigt over de tilgængelige metoder:

notebookutils.fs.help()

Følgende tabel viser de tilgængelige filsystemmetoder:

Metode Signatur Beskrivelse
ls ls(path: String): Array Lister indholdet af en mappe.
mkdirs mkdirs(path: String): Boolean Opretter den givne mappe, hvis den ikke findes, og opretter også nødvendige overordnede mapper.
cp cp(src: String, dest: String, recurse: Boolean = false): Boolean Kopierer en fil eller mappe, muligvis på tværs af filsystemer.
fastcp fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean Kopierer en fil eller mappe via azcopy for bedre ydeevne med store datavolumener.
mv mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean Flytter en fil eller mappe, muligvis på tværs af filsystemer.
put put(file: String, content: String, overwrite: Boolean = false): Boolean Skriver den givne streng ud til en fil, kodet i UTF-8.
head head(file: String, max_bytes: int = 1024 * 100): String Returnerer op til de første max_bytes bytes af den givne fil som en streng kodet i UTF-8.
append append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean Tilføjer indholdet til en fil.
rm rm(path: String, recurse: Boolean = false): Boolean Fjerner en fil eller mappe.
exists exists(path: String): Boolean Tjekker om der findes en fil eller mappe.
getProperties getProperties(path: String): Map Får egenskaberne for den givne sti. Tilgængelig kun i Python-notebooks (ikke understøttet i PySpark, Scala eller R).

Bemærkning

Alle filsystemmetoder er tilgængelige i Python, PySpark, Scala og R-notebooks, medmindre andet er angivet. Scala bruger camelCase parameternavne (for eksempel createPath i stedet for create_path, maxBytes i stedet for max_bytes).

For monterings- og afmonteringsoperationer, se Filmontering og afmontering.

Bemærkning

Husk følgende begrænsninger og overvejelser, når du arbejder med notebookutils.fs:

  • Stiadfærd varierer efter notesbogstype: I Spark-notebooks afløses relative stier til standard Lakehouse ABFSS-sti. I Python-notebooks løses relative stier til den lokale filsystem-arbejdsmappe (/home/trusted-service-user/work).
  • Samtidige skrivebegrænsninger: notebookutils.fs.append() og notebookutils.fs.put() understøtter ikke samtidige skrivninger til den samme fil på grund af manglende atomitetsgarantier.
  • Appende loop delay: Når du bruger notebookutils.fs.append() in-loops, tilføj 0,5-1 sekunds dvale mellem skrivningerne for dataintegritet.
  • OneLake genvejsbegrænsninger: For S3/GCS-type genveje, brug monterede stier i stedet for ABFS-stier for cp() og fastcp() operationer.
  • Begrænsninger på tværs af regioner: fastcp() understøtter ikke kopiering af filer i OneLake på tværs af regioner. Brug cp() i stedet.
  • Runtime-version: NotebookUtils er designet til at fungere med Spark 3.4 (Runtime v1.2) og nyere.
  • cp() adfærd i Python-notebooks: I Python-notebooks cp() bruges internt den samme azcopy-baserede mekanisme som fastcp(), så begge metoder opfører sig identisk.

NotebookUtils fungerer sammen med filsystemet på samme måde som Spark-API'er. notebookutils.fs.mkdirs() Tag for eksempel brugen af Lakehouse:

Forbrug Relativ sti fra HDFS-rod Absolut sti til ABFS-filsystem Absolut sti til lokalt filsystem i drivernoden
Ikke-standard Lakehouse Ikke understøttet notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") notebookutils.fs.mkdirs("file:/<new_dir>")
Standard Lakehouse Mappe 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 monteret i din notesbog med en standard filcache-timeout på 120 sekunder. Det betyder, at filer caches i notesbogens lokale midlertidige mappe i 120 sekunder, selvom de fjernes fra Lakehouse. Hvis du vil ændre timeout-reglen, kan du afmontere standardstierne i Lakehouse-filen og montere dem igen med en anden fileCacheTimeout værdi.

  • For ikke-standard Lakehouse-konfigurationer kan du sætte den relevante fileCacheTimeout parameter under monteringen af Lakehouse-stierne. Hvis timeout angives til 0, sikrer du, at den nyeste fil hentes fra Lakehouse-serveren.

Liste filer

For at liste indholdet af en mappe, brug 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 opfører sig forskelligt, når det notebookutils.fs.ls() bruger en relativ sti, afhængigt af typen af notesbog.

  • I en Spark-notesbog: Den relative sti er relativ i forhold til Standard Lakehouses ABFSS-sti. notebookutils.fs.ls("Files") peger f.eks. på mappen Files i standardmappen Lakehouse.

    Eksempel:

    notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")
    
  • I en Python-notebook: Den relative sti er relativ til det lokale filsystems arbejdsmappe, som som standard er /home/trusted-service-user/work. Derfor skal du bruge den fulde sti i stedet for en relativ sti notebookutils.fs.ls("/lakehouse/default/Files") til at få adgang til den Files mappe i Standard Lakehouse.

    Eksempel:

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

Vis filegenskaber

Brug notebookutils.fs.ls() til at inspicere filegenskaber som filnavn, filsti, filstørrelse og om et element er en fil eller mappe.

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

Brug f-strenge, hvis du vil have mere læsbart output:

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

Opret en ny mappe

Opret en mappe, hvis den ikke findes, inklusive eventuelle 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å tværs af filsystemer. Indstil recurse=True til at kopiere kataloger rekursivt.

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

Bemærkning

Python-notesbogsnote: I Python-notebooks cp() bruges internt den samme azcopy-baserede mekanisme som fastcp(), hvilket giver effektiv ydeevne for begge metoder. På grund af begrænsningerne ved OneLake-genvejen, anbefales det, når du skal bruge notebookutils.fs.cp() den til at kopiere data fra en S3/GCS-genvej, at bruge en monteret sti i stedet for en abfss-sti.

Tips

Tjek altid den booleske returværdi for at verificere, om operationen lykkedes. Brug notebookutils.fs.exists() den til at verificere kildestien, før du starter en kopieringsoperation.

Følgende eksempel viser en krydslagringskopi 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
)

Kopifil med effektiv udførelse

fastcp Brug den til mere effektive kopieringsoperationer, især med store datamængder. Parameteren recurse er som standard .True

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

Tips

Brug fastcp() i stedet for cp() til store dataoverførsler. Metoden fastcp bruger azcopy under motorhjelmen, hvilket giver betydeligt bedre gennemstrømning til masse-filoperationer. I Python-notebooks bruger begge cp() og fastcp() den samme underliggende mekanisme.

Hav disse overvejelser i tankerne:

  • notebookutils.fs.fastcp() understøtter ikke kopiering af filer i OneLake på tværs af regioner. I dette tilfælde kan du bruge notebookutils.fs.cp() i stedet.
  • På grund af begrænsningerne ved OneLake-genvejen, anbefales det, når du skal bruge notebookutils.fs.fastcp() den til at kopiere data fra en S3/GCS-genvej, at bruge en monteret sti i stedet for en abfss-sti.

Vis filindhold

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

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

Tips

For store filer bruges head() med en passende max_bytes værdi for at undgå hukommelsesproblemer. Standardværdien er 100 KB (1024 * 100).

Følgende eksempel læser de første 1.000 bytes af en fil:

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

Bemærkning

Standardværdien for max_bytes varierer mellem sprog: Python- og Scala-notebooks bruger 102400 (100 KB), mens R-notebooks bruger 65535 (64 KB). I Scala hedder maxBytesdenne parameter .

Flyt fil

Flyt en fil eller mappe på tværs af filsystemer.

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

Vigtigt!

Parameterstandarden create_path varierer med kørselstid:

  • Spark-notebooks (PySpark, Scala, R): går som standard til False (false i Scala, FALSE i R). Forældremappen skal eksistere før flytningsoperationen.
  • Python-notebooks: standarden er .True Forældremappen oprettes automatisk, hvis den ikke eksisterer.

For at sikre ensartet adfærd på tværs af runtimes, skal du eksplicit sætte parameteren create_path i din kode. I Scala hedder createPathdenne parameter .

Brug navngivne parametre, hvis du vil have klarere kode:

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

Skriv 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

Føj indhold til en fil

Tilføj en UTF-8-streng til 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

Vigtigt!

notebookutils.fs.append() notebookutils.fs.put() og understøtter ikke samtidig skrivning til samme fil på grund af manglende atomsikkerhedsgarantier.

Når du bruger notebookutils.fs.append API'et i en for løkke til at skrive til den samme fil, tilføj en sleep sætning på cirka 0,5 til 1 sekund mellem de gentagne skrivninger. Denne anbefaling skyldes, at notebookutils.fs.append API'ens interne flush handling er asynkron, så en kort forsinkelse hjælper med at 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

Slet fil eller mappe

Fjern en fil eller mappe. Indstil recurse=True at fjerne mapper rekursivt.

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

Tjek om der findes en fil eller mappe

Tjek om en fil eller mappe findes på den angivne sti. Den returnerer True , hvis stien eksisterer; ellers returnerer Falseden .

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

Tips

Brug exists() før udførelse af filoperationer for at forhindre fejl. For eksempel skal du tjekke, at der findes en kildefil, før du prøver at 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.")

Få filegenskaber

Få egenskaber for en sti som et kort af navn-værdi-par. Det understøttes kun for Azure Blob Storage-stier.

Bemærkning

Metoden getProperties er kun tilgængelig i Python-notebooks. Det understøttes ikke i Spark-notebooks (PySpark, Scala eller R).

Parametre:

Parameter Type Påkrævet Beskrivelse
path String Ja ABFS-sti til filen eller mappen.

Returer: En ordbog (kort), der indeholder metadata-egenskaber såsom filstørrelse, oprettelsestid, sidst ændrede tid og indholdstype.

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