Arbeta med filer i Azure Databricks
Azure Databricks tillhandahåller flera verktyg och API:er för att interagera med filer på följande platser:
- Unity Catalog-volymer
- Arbetsytefiler
- Molnobjektlagring
- DBFS-monteringar och DBFS-rot
- 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-filsystemutitlities (
dbutils.fs
eller%fs
) - Databricks CLI
- Databricks REST API
- Bash Shell-kommandon (
%sh
) - Biblioteksinstallationer med notebook-omfång med hjälp av
%pip
- Pandor
- VERKTYG för HANTERING och bearbetning av OSS Python-filer
Viktigt!
Filåtgärder som kräver FUSE-åtkomst till data 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.
Scala stöder inte FUSE för Unity Catalog-volymer eller arbetsytefiler vid beräkning som konfigurerats med enkel användaråtkomstläge eller kluster utan Unity Catalog. Scala har stöd för FUSE för Unity Catalog-volymer och arbetsytefiler vid beräkning som konfigurerats med Unity Catalog och läget för delad åtkomst.
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.
POSIX-sökvägar ger dataåtkomst i förhållande till drivrutinsroten (
/
). 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.
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. Se Vad är Unity Catalog-volymer?.
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 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') |
OSS Python | os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory') |
Kommentar
Schemat dbfs:/
krävs när du arbetar med Databricks CLI.
Volymbegränsningar
Volymer har följande begränsningar:
Direkt-tillägg eller icke-sekventiella (slumpmässiga) skrivningar, till exempel att skriva Zip- och Excel-filer stöds inte. För arbetsbelastningar med direkt tillägg eller slumpmässig skrivning utför du först åtgärderna på en lokal disk och kopierar sedan resultatet till Unity Catalog-volymer. Till exempel:
# python import xlsxwriter from shutil import copyfile workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx') worksheet = workbook.add_worksheet() worksheet.write(0, 0, "Key") worksheet.write(0, 1, "Value") workbook.close() copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx')
Glesa filer stöds inte. Om du vill kopiera glesa filer använder du
cp --sparse=never
:$ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file error writing '/dbfs/sparse.file': Operation not supported $ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
Arbeta med arbetsytefiler
Databricks-arbetsytefiler är en uppsättning filer på en arbetsyta som inte är notebook-filer. Du kan använda arbetsytefiler för att lagra och komma åt data och andra filer som sparats tillsammans med notebook-filer 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 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') |
OSS Python | os.listdir('/Workspace/Users/<user-folder>/path/to/directory') |
Kommentar
Schemat file:/
krävs när du arbetar med Databricks Utilities, Apache Spark eller SQL.
Begränsningar för arbetsytefiler
Arbetsytefiler har följande begränsningar:
Filstorleken för arbetsytan är begränsad till 500 MB från användargränssnittet. Den maximala filstorleken som tillåts när du skriver från ett kluster är 256 MB.
Om arbetsflödet använder källkod som finns på en fjärransluten Git-lagringsplats kan du inte skriva till den aktuella katalogen eller skriva med hjälp av en relativ sökväg. Skriv data till andra platsalternativ.
Du kan inte använda
git
kommandon när du sparar till arbetsytefiler. Det går inte att skapa.git
kataloger i arbetsytefiler.Det finns begränsat stöd för filåtgärder för arbetsytor från serverlös beräkning.
Det går inte att skriva till arbetsytefiler.
symlinks stöds inte.
Det går inte att komma åt arbetsytefiler från användardefinierade funktioner (UDF:er) i kluster med läget för delad åtkomst.
Var går borttagna arbetsytefiler?
Om du tar bort en arbetsytefil skickas den till papperskorgen. Du kan antingen återställa eller permanent ta bort filer från papperskorgen med hjälp av användargränssnittet.
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. Om du väljer att direkt komma åt data i molnobjektlagring med hjälp av URI:er måste du konfigurera behörigheter. Se Hantera externa platser, externa tabeller 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 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 |
OSS Python | Stöds inte |
Kommentar
Lagring av molnobjekt stöder inte genomströmning av autentiseringsuppgifter.
Arbeta med filer i DBFS-monteringar och DBFS-rot
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 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') |
OSS Python | os.listdir('/dbfs/mnt/path/to/directory') |
Kommentar
Schemat dbfs:/
krävs när du arbetar med Databricks CLI.
Arbeta med filer i tillfällig lagring som är kopplad till drivrutinsnoden
Det ephermala lagringsutrymme som är kopplat 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 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') |
OSS Python | os.listdir('/path/to/directory') |
Kommentar
Schemat file:/
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. Om du behöver flytta data från drivrutinsfilsystemet till Unity Catalog-volymer 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>
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för