Dela via


Arbeta med filer på Azure Databricks

Azure Databricks har flera verktyg och API:er för att interagera med filer på följande platser:

  • Unity Catalog-volymer
  • Arbetsytefiler
  • Lagring av molnobjekt
  • DBFS-monteringar och DBFS-roten
  • Tillfällig lagring som är kopplad till drivrutinsnoden i klustret

Den här artikeln innehåller exempel på hur du interagerar med filer på dessa platser för följande verktyg:

  • Apache Spark
  • Spark SQL och Databricks SQL
  • Databricks-filsystemverktyg (dbutils.fs eller %fs)
  • Databricks kommandoradsgränssnitt (CLI)
  • Databricks REST API
  • Bash shell-kommandon (%sh)
  • Biblioteksinstallationer begränsade till notebook med hjälp av %pip
  • Pandor
  • VERKTYG för HANTERING och bearbetning av OSS Python-filer

Viktig

Vissa åtgärder i Databricks, särskilt de som använder Java- eller Scala-bibliotek, körs som JVM-processer, till exempel:

  • Ange ett JAR-filberoende som använder --jars i Spark-konfigurationer
  • Anropa cat eller java.io.File i Scala-anteckningsblock
  • Anpassade datakällor, till exempel spark.read.format("com.mycompany.datasource")
  • Bibliotek som läser in filer med Javas FileInputStream eller Paths.get()

Dessa åtgärder stöder inte läsning från eller skrivning till Unity Catalog-volymer eller arbetsytefiler med hjälp av standardfilsökvägar, till exempel /Volumes/my-catalog/my-schema/my-volume/my-file.csv. Om du behöver komma åt volymfiler eller arbetsytefiler från JAR-beroenden eller JVM-baserade bibliotek kopierar du först filerna för att beräkna lokal lagring med hjälp av Python eller %sh kommandon, till exempel %sh mv.. Använd inte %fs och dbutils.fs som använder JVM. Om du vill komma åt filer som redan har kopierats lokalt använder du språkspecifika kommandon som Python shutil eller använder %sh kommandon. Om en fil måste finnas under klusterstarten använder du ett init-skript för att flytta filen först. Se Vad är init-skript?.

Behöver jag ange ett URI-schema för åtkomst till data?

Dataåtkomstsökvägar i Azure Databricks följer någon av följande standarder:

  • sökvägar i URI-format innehåller ett URI-schema. För Databricks-inbyggda dataåtkomstlösningar är URI-scheman valfria för de flesta användningsfall. När du har direkt åtkomst till data i molnobjektlagring måste du ange rätt URI-schema för lagringstypen.

    URI-sökvägsdiagram

  • POSIX-sökvägar ger dataåtkomst i förhållande till drivrutinens rot (/). Sökvägar i POSIX-format kräver aldrig ett schema. Du kan använda Unity Catalog-volymer eller DBFS-monteringar för att ge POSIX-liknande åtkomst till data i molnobjektlagring. Många ML-ramverk och andra OSS Python-moduler kräver FUSE och kan bara använda POSIX-liknande sökvägar.

    POSIX-sökvägsdiagram

Anteckning

Filåtgärder som kräver FUSE-dataåtkomst kan inte direkt komma åt molnobjektlagring med hjälp av URI:er. Databricks rekommenderar att du använder Unity Catalog-volymer för att konfigurera åtkomst till dessa platser för FUSE.

Vid beräkning som konfigurerats med dedikerat åtkomstläge (tidigare åtkomstläge för en enskild användare) och Databricks Runtime 14.3 och senare stöder Scala FUSE för Unity Catalog-volymer och arbetsytefiler, förutom underprocesser som kommer från Scala, till exempel Scala-kommandot "cat /Volumes/path/to/file".!!.

Arbeta med filer i Unity Catalog-volymer

Databricks rekommenderar att du använder Unity Catalog-volymer för att konfigurera åtkomst till icke-tabellbaserade datafiler som lagras i molnobjektlagring. Fullständig dokumentation om hantering av filer i volymer, inklusive detaljerade instruktioner och metodtips, finns i Arbeta med filer i Unity Catalog-volymer.

I följande exempel visas vanliga åtgärder med olika verktyg och gränssnitt:

Verktyg Exempel
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL och Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Databricks-filsystemverktyg dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Databricks kommandoradsgränssnitt (CLI) databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
Databricks REST API POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Bash shell-kommandon %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Biblioteksinstallationer %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandor df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
Öppen källkod Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Information om volymbegränsningar och lösningar finns i Begränsningar för arbete med filer i volymer.

Arbeta med arbetsytefiler

Databricks arbetsytans filer är filerna i en arbetsyta, lagrade i lagringskontot för arbetsytan. Du kan använda arbetsytefiler för att lagra och komma åt filer som notebook-filer, källkodsfiler, datafiler och andra arbetsytetillgångar. Eftersom arbetsytefiler har storleksbegränsningar rekommenderar Databricks endast lagring av små datafiler här främst för utveckling och testning.

Verktyg Exempel
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL och Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Databricks-filsystemverktyg dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Databricks kommandoradsgränssnitt (CLI) databricks workspace list
Databricks REST API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Bash shell-kommandon %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Biblioteksinstallationer %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandor df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
Öppen källkod Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Anteckning

Det file:/ schemat krävs när du arbetar med Databricks Utilities, Apache Spark eller SQL.

Begränsningarna för att arbeta med arbetsytefiler finns i Begränsningar.

Var går borttagna arbetsytefiler?

Om du tar bort en arbetsytefil skickas den till papperskorgen. Du kan återställa eller permanent ta bort filer från papperskorgen med hjälp av användargränssnittet.

Se Ta bort ett objekt.

Arbeta med filer i molnobjektlagring

Databricks rekommenderar att du använder Unity Catalog-volymer för att konfigurera säker åtkomst till filer i molnobjektlagring. Du måste konfigurera behörigheter om du väljer att komma åt data direkt i molnobjektlagring med hjälp av URI:er. Se Hanterade och externa volymer.

I följande exempel används URI:er för att komma åt data i molnobjektlagring:

Verktyg Exempel
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL och Databricks SQL SELECT * FROM csv.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json`; LIST 'abfss://container-name@storage-account-name.dfs.core.windows.net/path';
Databricks-filsystemverktyg dbutils.fs.ls("abfss://container-name@storage-account-name.dfs.core.windows.net/path/") %fs ls abfss://container-name@storage-account-name.dfs.core.windows.net/path/
Databricks kommandoradsgränssnitt (CLI) Stöds inte
Databricks REST API Stöds inte
Bash shell-kommandon Stöds inte
Biblioteksinstallationer %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandor Stöds inte
Öppen källkod Python Stöds inte

Arbeta med filer i DBFS-monteringar och DBFS-rotsystemet

DBFS-monteringar kan inte skyddas med Unity Catalog och rekommenderas inte längre av Databricks. Data som lagras i DBFS-roten är tillgängliga för alla användare på arbetsytan. Databricks rekommenderar att du inte lagrar känslig kod eller produktionskod eller data i DBFS-roten. Se Vad är DBFS?.

Verktyg Exempel
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL och Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Databricks-filsystemverktyg dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Databricks kommandoradsgränssnitt (CLI) databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
Databricks REST API POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Bash shell-kommandon %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Biblioteksinstallationer %pip install /dbfs/mnt/path/to/my_library.whl
Pandor df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
Öppen källkod Python os.listdir('/dbfs/mnt/path/to/directory')

Anteckning

Det dbfs:/ schemat krävs när du arbetar med Databricks CLI.

Arbeta med filer i tillfällig lagring som är kopplade till drivrutinsnoden

Den tillfälliga lagring som är kopplad till drivrutinsnoden är blocklagring med inbyggd POSIX-baserad sökvägsåtkomst. Alla data som lagras på den här platsen försvinner när ett kluster avslutas eller startas om.

Verktyg Exempel
Apache Spark Stöds inte
Spark SQL och Databricks SQL Stöds inte
Databricks-filsystemverktyg dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks kommandoradsgränssnitt (CLI) Stöds inte
Databricks REST API Stöds inte
Bash shell-kommandon %sh curl http://<address>/text.zip > /tmp/text.zip
Biblioteksinstallationer Stöds inte
Pandor df = pd.read_csv('/path/to/data.csv')
Öppen källkod Python os.listdir('/path/to/directory')

Anteckning

Det file:/ schemat krävs när du arbetar med Databricks Utilities.

Flytta data från tillfällig lagring till volymer

Du kanske vill komma åt data som laddats ned eller sparats i tillfällig lagring med Apache Spark. Eftersom tillfällig lagring är kopplad till drivrutinen och Spark är en distribuerad bearbetningsmotor kan inte alla åtgärder komma åt data direkt här. Anta att du måste flytta data från drivrutinsfilsystemet till Unity Catalog-volymer. I så fall kan du kopiera filer med hjälp av magiska kommandon eller Databricks-verktyg, som i följande exempel:

dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>

Ytterligare resurser

Information om hur du laddar upp lokala filer eller laddar ned internetfiler till Azure Databricks finns i Ladda upp filer till Azure Databricks.