NotebookUtils-filsystemverktyg för Fabric

notebookutils.fs tillhandahåller verktyg för att arbeta med olika filsystem, inklusive Azure Data Lake Storage (ADLS) Gen2 och Azure Blob Storage. Se till att du konfigurerar åtkomsten till Azure Data Lake Storage Gen2 och Azure Blob Storage på rätt sätt.

Kör följande kommandon för en översikt över tillgängliga metoder:

notebookutils.fs.help()

I följande tabell visas de tillgängliga filsystemmetoderna:

Metod Signature Beskrivning
ls ls(path: String): Array Visar en lista över innehållet i en katalog.
mkdirs mkdirs(path: String): Boolean Skapar den angivna katalogen om den inte finns och skapar även nödvändiga överordnade kataloger.
cp cp(src: String, dest: String, recurse: Boolean = false): Boolean Kopierar en fil eller katalog, eventuellt över filsystem.
fastcp fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean Kopierar en fil eller katalog via azcopy för bättre prestanda med stora datavolymer.
mv mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean Flyttar en fil eller katalog, eventuellt över filsystem.
put put(file: String, content: String, overwrite: Boolean = false): Boolean Skriver ut den angivna strängen till en fil, kodad i UTF-8.
head head(file: String, max_bytes: int = 1024 * 100): String Returnerar upp till de första max_bytes byteen i den angivna filen som en sträng kodad i UTF-8.
append append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean Lägger till innehållet i en fil.
rm rm(path: String, recurse: Boolean = false): Boolean Tar bort en fil eller katalog.
exists exists(path: String): Boolean Kontrollerar om det finns en fil eller katalog.
getProperties getProperties(path: String): Map Hämtar egenskaperna för den angivna sökvägen. Endast tillgängligt i Python-notebook-filer (stöds inte i PySpark, Scala eller R).

Anmärkning

Alla filsystemmetoder är tillgängliga i Python-, PySpark-, Scala- och R-notebooks, om inte annat anges. Scala använder camelCase-parameternamn (till exempel createPath i stället för create_pathi maxBytes stället för max_bytes).

Information om hur du utför monterings- och avmonteringsåtgärder finns i Montera och avmontera filer.

Anmärkning

Tänk på följande begränsningar och överväganden när du arbetar med notebookutils.fs:

  • Sökvägsbeteendet varierar beroende på notebook-typ: I Spark-notebooks relaterar relativa sökvägar till standardsökvägen Lakehouse ABFSS. I Python-notebooks matchas relativa sökvägar till det lokala filsystemets arbetskatalog (/home/trusted-service-user/work).
  • Samtidiga skrivbegränsningar: notebookutils.fs.append() och notebookutils.fs.put() stöder inte samtidiga skrivningar till samma fil på grund av brist på atomicitetsgarantier.
  • Tilläggsfördröjning i loop: När du använder notebookutils.fs.append() i loopar ska du lägga till 0,5–1 sekunds paus mellan skrivningarna för att säkerställa dataintegritet.
  • OneLake-genvägsbegränsningar: För genvägar av typen S3/GCS använder du monterade sökvägar i stället för ABFS-sökvägar för cp() och fastcp() åtgärder.
  • Begränsningar mellan regioner: fastcp() stöder inte kopiering av filer i OneLake mellan regioner. Använd cp() i stället.
  • Körningsversion: NotebookUtils är utformat för att fungera med Spark 3.4 (Runtime v1.2) och senare.
  • cp() beteende i Python-notebook-filer: I Python-notebook-filer cp() använder internt samma azcopy-baserade mekanism som fastcp(), så att båda metoderna beter sig identiskt.

NotebookUtils fungerar med filsystemet på samma sätt som Spark-API:er. Ta till exempel användningen av notebookutils.fs.mkdirs() och Lakehouse.

Förbrukning Relativ sökväg från HDFS:s rot Absolut sökväg för ABFS-filsystem Absolut sökväg för det lokala filsystemet i drivrutinsnoden
Lakehouse i icke-standardläge Stöds ej notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") notebookutils.fs.mkdirs("file:/<new_dir>")
Förvald 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>")
  • För standard-Lakehouse monteras filsökvägar i din notebook med en standardtidsgräns för filcache på 120 sekunder. Det innebär att filer cachelagras i anteckningsbokens lokala temporära mapp i 120 sekunder, även om de tas bort från Lakehouse. Om du vill ändra tidsgränsregeln kan du avmontera standardsökvägarna för Lakehouse-filen och sedan montera om dem med ett annat fileCacheTimeout-värde.

  • För Lakehouse-konfigurationer som inte är standard kan du ange lämplig fileCacheTimeout parameter vid montering av Lakehouse-sökvägarna. Om tidsgränsen anges till 0 ser du till att den senaste filen hämtas från Lakehouse-servern.

Lista filer

Om du vill visa en lista över innehållet i en katalog använder du notebookutils.fs.ls('Your directory path'). Som exempel:

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:t notebookutils.fs.ls() fungerar annorlunda vid användning av en relativ sökväg, beroende på notebooktypen.

  • I en Spark notebook: Den relativa sökvägen är relativ till Lakehouse ABFSS:s standardsökväg. Till exempel pekar notebookutils.fs.ls("Files") på katalogen Files i Standard Lakehouse.

    Som exempel:

    notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")
    
  • I en Python-anteckningsbok: Den relativa sökvägen är relativ till det lokala filsystemets arbetskatalog, som som standard är /home/trusted-service-user/work. Därför bör du använda den fullständiga sökvägen i stället för en relativ sökväg notebookutils.fs.ls("/lakehouse/default/Files") för att få åtkomst till katalogen Files i standardkatalogen i Lakehouse.

    Som exempel:

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

Visa filegenskaper

Använd notebookutils.fs.ls() för att granska filegenskaper som filnamn, filsökväg, filstorlek och om ett objekt är 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)

Använd f-strängar om du vill ha mer läsbara 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}")

Skapa ny katalog

Skapa en katalog om den inte finns, inklusive eventuella nödvändiga överordnade 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 

Kopiera fil

Kopiera en fil eller katalog mellan filsystem. Ange recurse=True att kopiera kataloger rekursivt.

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

Anmärkning

Anteckning om Python-notebook-fil: I Python-notebook-filer cp() använder internt samma azcopy-baserade mekanism som fastcp(), vilket ger effektiv prestanda för båda metoderna. På grund av begränsningarna i OneLake-genvägen rekommenderar vi att du använder en monterad sökväg i stället för en abfss-sökväg när du behöver använda notebookutils.fs.cp() för att kopiera data från genväg av S3/GCS-typ.

Tips/Råd

Kontrollera alltid det booleska returvärdet för att kontrollera om åtgärden lyckades. Använd notebookutils.fs.exists() för att verifiera källsökvägen innan du startar en kopieringsåtgärd.

I följande exempel visas en kopia mellan lagringsenheter från Standard Lakehouse till ett ADLS Gen2-konto:

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

Effektiv kopiering av fil

Använd fastcp för effektivare kopieringsåtgärder, särskilt med stora datavolymer. Som standard är parametern recurseTrue.

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

Tips/Råd

Använd fastcp() i stället cp() för för stora dataöverföringar. Metoden fastcp använder azcopy i bakgrunden, vilket ger betydligt bättre genomströmning för stora filoperationer. I Python-notebook-filer använder båda cp() och fastcp() samma underliggande mekanism.

Tänk på följande:

  • notebookutils.fs.fastcp() stöder inte kopiering av filer i OneLake mellan regioner. I det här fallet kan du använda notebookutils.fs.cp() i stället.
  • På grund av begränsningarna i OneLake-genvägen rekommenderar vi att du använder en monterad sökväg i stället för en abfss-sökväg när du behöver använda notebookutils.fs.fastcp() för att kopiera data från genväg av S3/GCS-typ.

Förhandsgranska filinnehåll

Återgå till de första max_bytes byteen i en fil som en UTF-8-sträng.

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

Tips/Råd

För stora filer använder du head() med ett lämpligt max_bytes värde för att undvika minnesproblem. Standardvärdet är 100 KB (1024 * 100).

Följande exempel läser de första 1 000 byteen av en fil:

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

Anmärkning

Standardvärdet för max_bytes skiljer sig åt mellan olika språk: Python- och Scala-notebook-filer använder 102400 (100 KB), medan R-notebook-filer använder 65535 (64 KB). I Scala heter maxBytesden här parametern .

Flytta fil

Flytta en fil eller katalog mellan filsystem.

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

Viktigt!

Standardinställningen för create_path-parametern varierar beroende på runtime:

  • Spark-notebooks (PySpark, Scala, R): standardvärdet är False (false i Scala, FALSE i R). Den överordnade katalogen måste vara tillgänglig innan förflyttningen.
  • Python-notebooks: standardvärdet är True. Den överordnade katalogen skapas automatiskt om den inte finns.

För att säkerställa konsekvent beteende mellan körningar anger du uttryckligen parametern create_path i koden. I Scala heter createPathden här parametern .

Använd namngivna parametrar om du vill ha tydligare kod:

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

Skriv fil

Skriv en UTF-8-sträng till 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

Lägga till innehåll i en fil

Lägg till en UTF-8-sträng 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

Viktigt!

notebookutils.fs.append() och notebookutils.fs.put() stöder inte samtidig skrivning till samma fil på grund av brist på atomicitetsgarantier.

När du använder API:et notebookutils.fs.append i en for loop för att skriva till samma fil lägger du till en sleep instruktion på cirka 0,5 till 1 sekund mellan de återkommande skrivningar. Den här rekommendationen beror på att notebookutils.fs.append API:ets interna flush åtgärd är asynkron, så en kort fördröjning bidrar till att säkerställa dataintegriteten.

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

Ta bort fil eller katalog

Ta bort en fil eller katalog. Ange recurse=True för att ta bort kataloger rekursivt.

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

Kontrollera om det finns en fil eller katalog

Kontrollera om det finns en fil eller katalog på den angivna sökvägen. Den returnerar True om sökvägen finns. Annars returneras False.

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

Tips/Råd

Använd exists() innan du utför filåtgärder för att förhindra fel. Kontrollera till exempel att det finns en källfil innan du försöker kopiera eller flytta 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.")

Hämta filegenskaper

Hämta egenskaper för en sökväg som en karta över namn/värde-par. Det stöds bara för Azure Blob Storage-sökvägar.

Anmärkning

Metoden getProperties är endast tillgänglig i Python-notebook-filer. Det stöds inte i Spark Notebooks (PySpark, Scala eller R).

Parameters:

Parameter Type Obligatoriskt Beskrivning
path String Ja ABFS-sökväg till filen eller katalogen.

Returnerar: En ordbok (karta) som innehåller metadataegenskaper som filstorlek, skapelsetid, senast ändrade tid och innehållstyp.

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