Introduksjon av Fabric MSSparkUtils

Microsoft Spark Utilities (MSSparkUtils) er en innebygd pakke som hjelper deg med å utføre vanlige oppgaver på en enkel måte. Du kan brukeMSSparkUtils til å arbeide med filsystemer, for å få miljøvariabler, kjede notatblokker sammen og til å arbeide med hemmeligheter. MSSparkUtils er tilgjengelige i PySpark (Python) Scala, SparkR-notatblokker og Microsoft Fabric-rørledninger.

Viktig

Microsoft Fabric er for øyeblikket i FORHÅNDSVERSJON. Denne informasjonen er knyttet til et forhåndsutgitt produkt som kan endres vesentlig før det utgis. Microsoft gir ingen garantier, uttrykt eller underforstått, med hensyn til informasjonen som er oppgitt her.

Verktøy for filsystem

mssparkutils.fs tilbyr verktøy for å arbeide med ulike filsystemer, inkludert Azure Data Lake Storage Gen2 (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:

from notebookutils import mssparkutils
mssparkutils.fs.help()

Utdata

mssparkutils.fs provides utilities for working with various FileSystems.

Below is overview about the available methods:

cp(from: String, to: String, recurse: Boolean = false): Boolean -> Copies a file or directory, possibly across FileSystems
mv(from: String, to: String, recurse: Boolean = false): Boolean -> Moves a file or directory, possibly across FileSystems
ls(dir: String): Array -> Lists the contents of a directory
mkdirs(dir: String): Boolean -> Creates the given directory if it does not exist, also creating any necessary parent directories
put(file: String, contents: String, overwrite: Boolean = false): Boolean -> Writes the given String out to a file, encoded in UTF-8
head(file: String, maxBytes: int = 1024 * 100): String -> Returns up to the first 'maxBytes' bytes of the given file as a String encoded in UTF-8
append(file: String, content: String, createFileIfNotExists: Boolean): Boolean -> Append the content to a file
rm(dir: String, recurse: Boolean = false): Boolean -> Removes a file or directory
exists(file: String): Boolean -> Check if a file or directory exists
mount(source: String, mountPoint: String, extraConfigs: Map[String, Any]): Boolean -> Mounts the given remote storage directory at the given mount point
unmount(mountPoint: String): Boolean -> Deletes a mount point
mounts(): Array[MountPointInfo] -> Show information about what is mounted
getMountPath(mountPoint: String, scope: String = ""): String -> Gets the local path of the mount point

Use mssparkutils.fs.help("methodName") for more info about a method.

mssparkutils fungerer med filsystemet på samme måte som Spark API-er. Ta mssparkuitls.fs.mkdirs() og Fabric Lakehouse bruk for eksempel:

Bruk Relativ bane fra HDFS-rot Absolutt bane for ABFS-filsystem Absolutt bane for lokalt filsystem i drivernode
Nondefault lakehouse Støttes ikke mssparkutils.fs.mkdirs("abfss://< container_name>@<storage_account_name.dfs.core.windows.net/<> new_dir>") mssparkutils.fs.mkdirs("file:/<new_dir>")
Standard lakehouse Katalog under «Filer» eller «Tabeller»: mssparkutils.fs.mkdirs("Files/<new_dir>") mssparkutils.fs.mkdirs("abfss://< container_name>@<storage_account_name.dfs.core.windows.net/<> new_dir>") mssparkutils.fs.mkdirs("file:/<new_dir>")

Listefiler

Før opp innholdet i en katalog, bruk mssparkutils.fs.ls(«Din katalogbane»), for eksempel:

mssparkutils.fs.ls("Files/tmp") # works with the default lakehouse files using relative path 
mssparkutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")  # based on ABFS file system 
mssparkutils.fs.ls("file:/tmp")  # based on local file system of driver node 

Vis filegenskaper

Returnerer filegenskaper, inkludert filnavn, filbane, filstørrelse og om det er en katalog og en fil.

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

Opprett ny katalog

Oppretter den angitte katalogen hvis den ikke finnes, og eventuelle nødvendige overordnede mapper.

mssparkutils.fs.mkdirs('new directory name')  
mssparkutils.fs. mkdirs("Files/<new_dir>")  # works with the default lakehouse files using relative path 
mssparkutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>")  # based on ABFS file system 
mssparkutils.fs.ls("file:/<new_dir>")  # based on local file system of driver node 

Kopier fil

Kopierer en fil eller katalog. Støtter kopiering på tvers av filsystemer.

mssparkutils.fs.cp('source file or directory', 'destination file or directory', True)# Set the third parameter as True to copy all files and directories recursively

Forhåndsvis filinnhold

Returnerer opptil de første maxBytes-byte for den angitte filen som en streng kodet i UTF-8.

mssparkutils.fs.head('file path', maxBytes to read)

Flytt fil

Flytter en fil eller katalog. Støtter flytting på tvers av filsystemer.

mssparkutils.fs.mv('source file or directory', 'destination directory', True) # Set the last parameter as True to firstly create the parent directory if it does not exist

Skrive fil

Skriver den angitte strengen ut til en fil, kodet i UTF-8. Skriver den angitte strengen ut til en fil, kodet i UTF-8.

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

Tilføy innhold i en fil

Tilføyer den angitte strengen til en fil, kodet i UTF-8.

mssparkutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it does not exist

Slett fil eller katalog

Fjerner en fil eller katalog.

mssparkutils.fs.rm('file path', True) # Set the last parameter as True to remove all files and directories recursively

Monter/demonter katalog

Du finner detaljert bruk i Filmontering og demontering.

Notatblokkverktøy

Bruk MSSparkUtils Notebook Utilities til å kjøre en notatblokk eller avslutte en notatblokk med en verdi. Kjør følgende kommando for å få en oversikt over de tilgjengelige metodene:

mssparkutils.notebook.help()

Utgang:


exit(value: String): void -> This method lets you exit a notebook with a value.
run(path: String, timeoutSeconds: int, arguments: Map): String -> This method runs a notebook and returns its exit value.

Referere til en notatblokk

Referer til en notatblokk og returnerer avslutningsverdien. Du kan kjøre nestefunksjonskall i en notatblokk interaktivt eller i et datasamlebånd. Notatblokken som refereres til, kjører i Spark-utvalget som notatblokken kaller opp denne funksjonen.

mssparkutils.notebook.run("notebook name", <timeoutSeconds>, <parameterMap>)

Eksempel:

mssparkutils.notebook.run("Sample1", 90, {"input": 20 })

Du kan åpne øyeblikksbildekoblingen for referansekjøring i celleutdataene, øyeblikksbildet fanger opp resultatene av kodekjøringen og lar deg enkelt feilsøke en referansekjøring.

Skjermbilde av referansekjøringsresultat.

Skjermbilde av et eksempel på øyeblikksbilde.

Obs!

For øyeblikket støtter Fabric-notatblokken bare referansenotatblokker i et arbeidsområde.

Avslutte en notatblokk

Avslutter en notatblokk med en verdi. Du kan kjøre nestefunksjonskall i en notatblokk interaktivt eller i et datasamlebånd.

  • Når du kaller en exit() -funksjon fra en notatblokk interaktivt, kaster Fabric-notatblokken et unntak, hopper over kjøring av delspvalensceller og holder Spark-økten i live.
  • Når du orkestrerer en notatblokk i datasamlebånd som kaller en exit()- funksjon, returneres notatblokkaktiviteten med en avslutningsverdi, fullfører datasamlebåndkjøringen og stopper Spark-økten.
  • Når du kaller en exit()- funksjon i en notatblokk som det refereres til, vil Fabric Spark stoppe videre kjøring av den refererte notatblokken, og fortsette å kjøre neste celler i hovednotatblokken som kaller opp run()- funksjonen. Eksempel: Notatblokk1 har tre celler og kaller opp en exit()- funksjon i den andre cellen. Notebook2 har fem celler og kall kjøres(notatblokk1) i den tredje cellen. Når du kjører Notatblokk2, stopper Notatblokk1 i den andre cellen når du trykker på exit()- funksjonen. Notatblokk2 fortsetter å kjøre sin fjerde celle og femte celle.
mssparkutils.notebook.exit("value string")

Eksempel:

Eksempel1 notatblokk med følgende to celler:

  • Celle 1 definerer en inndataparameter med standardverdien satt til 10.

  • Celle 2 avslutter notatblokken med inndata som avslutningsverdi.

Skjermbilde som viser en eksempelnotatblokk med avslutningsfunksjon.

Du kan kjøre eksempel1 i en annen notatblokk med standardverdier:

exitVal = mssparkutils.notebook.run("Sample1")
print (exitVal)

Utgang:

Notebook executed successfully with exit value 10

Du kan kjøre eksempel1 i en annen notatblokk og angi inndataverdien som 20:

exitVal = mssparkutils.notebook.run("Sample1", 90, {"input": 20 })
print (exitVal)

Utgang:

Notebook executed successfully with exit value 20

Legitimasjonsverktøy

Du kan bruke MSSparkUtils Credentials Utilities til å få tilgangstokener og administrere hemmeligheter i Azure Key Vault.

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

mssparkutils.credentials.help()

Utgang:

getToken(audience, name): returns AAD token for a given audience, name (optional)
getSecret(akvName, secret): returns AKV secret for a given akvName, secret key

Hent token

Returnerer Azure AD token for en gitt målgruppe, navn (valgfritt), Listen nedenfor viser gjeldende tilgjengelige målgruppenøkler:

  • Lagringsgrupperessurs: «lagring»
  • Power BI-ressurs: «pbi»
  • Azure Key Vault Resource: «keyvault»
  • Synapse RTA KQL DB Resource: "kusto"

Kjør følgende kommando for å hente tokenet:

mssparkutils.credentials.getToken('audience Key')

Få hemmelighet ved hjelp av brukerlegitimasjon

Returnerer Azure Key Vault hemmelighet for et gitt Azure Key Vault navn, hemmelig navn og koblet tjenestenavn ved hjelp av brukerlegitimasjon.

mssparkutils.credentials.getSecret('azure key vault name','secret name')

Filmontering og demontering

Microsoft Fabric støtter monteringsscenarioer i Microsoft Spark Utilities-pakken. Du kan bruke montering, demontering, getMountPath() og mounts() API-er til å knytte ekstern lagring (Azure Data Lake Storage Gen2) til alle fungerende noder (drivernoder og arbeidernoder). Når lagringsmonteringspunktet er på plass, bruker du API-en for den lokale filen til å få tilgang til data som om den er lagret i det lokale filsystemet.

Slik monterer du en ADLS Gen2-konto

Denne delen illustrerer hvordan du monterer Azure Data Lake Storage Gen2 trinn for trinn som et eksempel. Montering av Blob Storage fungerer på samme måte.

Eksemplet forutsetter at du har én Data Lake Storage Gen2 konto kalt storegen2. Kontoen har én beholder med navnet mycontainer som du vil montere på /test i spark-økten for notatblokken.

Skjermbilde som viser hvor du velger en beholder som skal monteres.

Hvis du vil montere beholderen kalt mycontainer, må mssparkutils først kontrollere om du har tillatelse til å få tilgang til beholderen. Microsoft Fabric støtter for øyeblikket to godkjenningsmetoder for utløsermonteringsoperasjonen: accountKey og sastoken.

Montere via signaturtoken eller kontonøkkel for delt tilgang

Mssparkutils støtter eksplisitt å sende en kontonøkkel eller SAS-token (Shared access signature) som en parameter for å montere målet.

Av sikkerhetsgrunner anbefaler vi at du lagrer kontonøkler eller SAS-tokener i Azure Key Vault (som følgende eksempel skjermbilde viser). Deretter kan du hente dem ved hjelp av mssparkutils.credentials.getSecret API. Hvis du vil ha informasjon om bruken av Azure Key Vault, kan du se Om Azure Key Vault administrerte lagringskontonøkler.

Skjermbilde som viser hvor hemmeligheter som er lagret i en Azure-Key Vault.

Her er eksempelkoden for bruk av accountKey-metoden:

from notebookutils import mssparkutils  
# get access token for keyvault resource
# you can also use full audience here like https://vault.azure.net
accountKey = mssparkutils.credentials.getSecret("<vaultURI>", "<secretName>")
mssparkutils.fs.mount(  
    "abfss://mycontainer@<accountname>.dfs.core.windows.net",  
    "/test",  
    {"accountKey":accountKey}
)

For sastoken kan du referere til følgende eksempelkode:

from notebookutils import mssparkutils  
# get access token for keyvault resource
# you can also use full audience here like https://vault.azure.net
sasToken = mssparkutils.credentials.getSecret("<vaultURI>", "<secretName>")
mssparkutils.fs.mount(  
    "abfss://mycontainer@<accountname>.dfs.core.windows.net",  
    "/test",  
    {"sasToken":sasToken}
)

Obs!

Av sikkerhetsårsaker anbefales det ikke å lagre legitimasjon i kode. Hvis du vil beskytte legitimasjonen din ytterligere, vil vi fjerne hemmeligheten din i notatblokkutdata. Hvis du vil ha mer informasjon, kan du sjekke Hemmelig skjuling.

Slik monterer du et innsjøhus

Her er eksempelkoden for montering av et lakehouse til /test.

from notebookutils import mssparkutils 
mssparkutils.fs.mount( 
 "abfss://<workspace_id>@msit-onelake.dfs.fabric.microsoft.com/<lakehouse_id>", 
 "/test"
)

Få tilgang til filer under monteringspunktet ved hjelp av mssparktuils fs API

Hovedformålet med monteringsoperasjonen er å gi kunder tilgang til dataene som er lagret i en ekstern lagringskonto ved hjelp av en lokal filsystem-API. Du kan også få tilgang til dataene ved hjelp av mssparkutils fs API med en montert bane som parameter. Baneformatet som brukes her, er litt annerledes.

Anta at du monterte den Data Lake Storage Gen2 beholderen mycontainer til /test ved hjelp av monterings-API-en. Når du får tilgang til dataene ved hjelp av en lokal filsystem-API, er baneformatet slik:

/synfs/notebook/{sessionId}/test/{filename}

Når du vil ha tilgang til dataene ved hjelp av mssparkutils fs API, anbefaler vi at du bruker en getMountPath() for å få den nøyaktige banen:

path = mssparkutils.fs.getMountPath("/test")
  • Listekataloger:

    mssparkutils.fs.ls(f"file://{mssparkutils.fs.getMountPath('/test')}")
    
  • Les filinnhold:

    mssparkutils.fs.head(f"file://{mssparkutils.fs.getMountPath('/test')}/myFile.txt")
    
  • Opprette en katalog:

    mssparkutils.fs.mkdirs(f"file://{mssparkutils.fs.getMountPath('/test')}/newdir")
    

Få tilgang til filer under monteringspunktet via lokal bane

Du kan enkelt lese og skrive filene i monteringspunkt ved hjelp av standard filsystemmåte, bruke Python som et eksempel:

#File read
with open(mssparkutils.fs.getMountPath('/test2') + "/myFile.txt", "r") as f:
    print(f.read())
#File write
with open(mssparkutils.fs.getMountPath('/test2') + "/myFile.txt", "w") as f:
    print(f.write("dummy data"))

Slik kontrollerer du eksisterende monteringspunkter

Du kan bruke mssparkutils.fs.mounts() API til å kontrollere all eksisterende informasjon om monteringspunkt:

mssparkutils.fs.mounts()

Slik demonterer du monteringspunktet

Bruk følgende kode til å demontere monteringspunktet (/test i dette eksemplet):

mssparkutils.fs.unmount("/test")

Kjente begrensninger

  • Den gjeldende monteringen er en jobbnivåkonfigurasjon, vi komprimerer på nytt for å bruke mounts API for å kontrollere om monteringspunktet finnes eller ikke er tilgjengelig.
  • Demonteringsmekanismen er ikke automatisk. Når programkjøringen er ferdig, må du eksplisitt kalle opp en demonterings-API i koden for å demontere monteringspunktet for å frigjøre diskplassen. Ellers vil monteringspunktet fremdeles finnes i noden etter at applikasjonskjøringen er ferdig.
  • Montering av en ADLS Gen1-lagringskonto støttes ikke.

Neste trinn