Megosztás a következőn keresztül:


Fájlok használata az Azure Databricksben

Az Azure Databricks több segédprogrammal és API-val rendelkezik a következő helyeken lévő fájlok kezeléséhez:

  • Unity Catalog-kötetek
  • Munkaterület fájljai
  • Felhőalapú objektumtárolás
  • DBFS-csatlakoztatások és DBFS-gyökér
  • Rövid élettartamú tároló a fürt illesztőcsomópontjaihoz csatlakoztatva

Ez a cikk példákat tartalmaz az alábbi helyeken található fájlokkal való interakcióra az alábbi eszközökhöz:

  • Apache Spark
  • Spark SQL és Databricks SQL
  • Databricks fájlrendszer-segédprogramok (dbutils.fs vagy %fs)
  • Databricks parancssori felület
  • Databricks REST API
  • Bash-rendszerhéjparancsok (%sh)
  • A jegyzetfüzet-hatókörű könyvtár telepítése %pip
  • Pandák
  • OSS Python-fájlkezelési és -feldolgozási segédprogramok

Fontos

A FUSE-adathozzáférést igénylő fájlműveletek nem férhetnek hozzá közvetlenül a felhőalapú objektumtárolóhoz URI-k használatával. A Databricks azt javasolja, hogy Unity Catalog-kötetekkel konfigurálja a hozzáférést ezekhez a helyekhez a FUSE-hoz.

A Scala támogatja a FUSE-t a Unity Catalog köteteihez és a munkaterület-fájlokhoz, olyan számítási feladatoknál, melyek Unity Cataloggal és dedikált hozzáférési móddal (korábban megosztott hozzáférési móddal) vannak konfigurálva. A dedikált hozzáférési móddal (korábban egyfelhasználós hozzáférési móddal) és a Databricks Runtime 14.3-as vagy újabb verzióval konfigurált számításnál a Scala támogatja a Unity Catalog-kötetekhez és munkaterületfájlokhoz készült FUSE-t, kivéve a Scala-ból származó alfolyamatokat, például a Scala parancsot "cat /Volumes/path/to/file".!!.

A Spark és más JVM-folyamatok csak a Unity Catalogot támogató olvasók és írók használatával férhetnek hozzá a Unity Catalog köteteihez vagy munkaterületfájljaihoz. Például nem adhat meg JAR-fájlt függőségként a Spark-konfigurációban, és nem használhat PySpark-egyéni adatforrásokat. Ha JVM-számítási feladattal rendelkezik olyan tárakból, amelyeknek kötetekben vagy munkaterületfájlokban lévő fájlokhoz kell hozzáférniük, másolja a fájlokat a számítási helyi tárolóba Python- vagy rendszerhéjparancsokkal, például %sh mv.. Ne használja a %fs vagy dbutils.fs parancsokat, amelyek a JVM-et használják. Ha egy fájlnak jelen kell lennie a fürt indítása során, először init szkripttel helyezze át a fájlt. Lásd Mik azok az init szkriptek?.

Meg kell adnia egy URI-sémát az adatok eléréséhez?

Az Azure Databricks adatelérési útvonalai az alábbi szabványok egyikét követik:

  • URI-stílusú útvonalak URI-sémát tartalmaznak. A Databricks-natív adatelérési megoldások esetében az URI-sémák a legtöbb használati esetben nem kötelezőek. Amikor közvetlenül hozzáfér az adatokhoz a felhőalapú objektumtárban, meg kell adnia a megfelelő URI-sémát a tárolási típushoz.

    URI-útvonalak diagramja

  • POSIX-stílusú elérési utak biztosítják az adathozzáférést az illesztőprogram gyökeréhez (/). A POSIX-stílusú útvonalak soha nem igényelnek sémát. Unity Catalog-kötetekkel vagy DBFS-csatlakoztatásokkal POSIX-stílusú hozzáférést biztosíthat az adatokhoz a felhőobjektum-tárolóban. Számos ML-keretrendszer és más OSS Python-modul FUSE-t igényel, és csak POSIX-stílusú elérési utakat használhat.

    POSIX-elérési utak diagramja

Fájlok használata Unity Catalog-kötetekben

A Databricks a Unity Catalog-kötetek használatát javasolja a felhőobjektum-tárolóban tárolt nem táblázatos adatfájlokhoz való hozzáférés konfigurálásához. Lásd Mik azok a Unity Catalog-kötetek?.

Eszköz Példa
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL és Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Databricks fájlrendszer-segédprogramok dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Databricks parancssori felület 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-rendszerhéj-parancsok %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Könyvtár telepítése %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandák 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')

Jegyzet

A dbfs:/ séma szükséges a Databricks parancssori felületének használatakor.

Mennyiségi korlátozások

A kötetekre a következő korlátozások vonatkoznak:

  • A közvetlen hozzáfűzés vagy a nem szekvenciális (véletlenszerű) írások, például Zip- és Excel-fájlok írása nem támogatott. Közvetlen hozzáfűzési vagy véletlenszerű írási számítási feladatok esetén először végezze el a műveleteket egy helyi lemezen, majd másolja az eredményeket a Unity Catalog-kötetekbe. Például:

    # 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')
    
  • A ritka fájlok nem támogatottak. Ritka fájlok másolásához használja a 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
    

Munkaterületfájlok kezelése

A Databricks munkaterület fájljai a munkaterületen lévő fájlok, amelyeket a munkaterület tárfiókjábantárolnak. A munkaterület fájljaival olyan fájlokat tárolhat és érhet el, mint a jegyzetfüzetek, a forráskódfájlok, az adatfájlok és más munkaterületi objektumok. Mivel a munkaterület fájljai méretkorlátozásokkal rendelkeznek, a Databricks csak kis adatfájlok tárolását javasolja itt elsősorban fejlesztés és tesztelés céljából.

Eszköz Példa
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL és Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Databricks fájlrendszer-segédprogramok dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Databricks parancssori felület databricks workspace list
Databricks REST API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Bash shell parancsok %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Könyvtár telepítése %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandák df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
OSS Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Jegyzet

A file:/ séma szükséges a Databricks Utilities, az Apache Spark vagy az SQL használatakor.

A munkaterületfájlok használatának korlátozásait a Korlátozásokcímű témakörben talál.

Hová kerülnek a törölt munkaterületfájlok?

A munkaterületfájl törlése a kukába küldi. A felhasználói felületen helyreállíthatja vagy véglegesen törölheti a fájlokat a kukából.

Lásd: Objektum törlése.

Fájlok használata a felhőobjektum-tárolóban

A Databricks a Unity Catalog-kötetek használatát javasolja a felhőobjektum-tárolóban lévő fájlok biztonságos hozzáférésének konfigurálásához. Engedélyeket kell konfigurálnia, ha úgy dönt, hogy a felhőalapú objektumtárban lévő adatokat közvetlenül URI-k használatával éri el. Lásd: Külső helyek, külső táblák és külső kötetek kezelése.

Az alábbi példák URI-kat használnak az adatok felhőbeli objektumtárolóban való eléréséhez:

Eszköz Példa
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL és 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 fájlrendszer-segédprogramok 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 parancssori felület Nem támogatott
Databricks REST API Nem támogatott
Bash héj parancsok Nem támogatott
Könyvtári telepítések %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandák Nem támogatott
Nyílt forráskódú Python Nem támogatott

Fájlokkal végzett munka DBFS-csatlakoztatásokban és DBFS-gyökérben

A DBFS-csatlakoztatások a Unity Catalog használatával nem védhetők meg, és a Databricks már nem ajánlja azokat. A DBFS-gyökérben tárolt adatok a munkaterület összes felhasználója számára elérhetők. A Databricks azt javasolja, hogy ne tároljon bizalmas vagy éles kódot vagy adatokat a DBFS-gyökérben. Lásd Mi az a DBFS?.

Eszköz Példa
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL és Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Databricks fájlrendszer-segédprogramok dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Databricks parancssori felület 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 parancsok %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Könyvtár telepítések %pip install /dbfs/mnt/path/to/my_library.whl
Pandák df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
OSS Python os.listdir('/dbfs/mnt/path/to/directory')

Jegyzet

A dbfs:/ séma szükséges a Databricks parancssori felületének használatakor.

Az illesztőprogram-csomóponthoz csatolt rövid élettartamú tárolóban lévő fájlok használata

Az illesztőprogram csomóponthoz csatlakoztatott ideiglenes tároló egy blokktároló, amely beépített, POSIX-alapú elérésiút-hozzáféréssel rendelkezik. Az adatok, amelyeket ezen a helyen tárolnak, eltűnnek, amikor egy fürt leáll vagy újraindul.

Eszköz Példa
Apache Spark Nem támogatott
Spark SQL és Databricks SQL Nem támogatott
Databricks fájlrendszer-segédprogramok dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks parancssori felület Nem támogatott
Databricks REST API Nem támogatott
Bash shell parancsok %sh curl http://<address>/text.zip > /tmp/text.zip
Könyvtár telepítése Nem támogatott
Pandák df = pd.read_csv('/path/to/data.csv')
Nyílt forráskódú szoftver: Python os.listdir('/path/to/directory')

Jegyzet

A Databricks Utilities használatakor a file:/ séma szükséges.

Adatok áthelyezése rövid élettartamú tárolóból kötetekbe

Előfordulhat, hogy az Apache Spark használatával szeretné elérni a letöltött vagy a rövid élettartamú tárolóba mentett adatokat. Mivel a rövid élettartamú tároló az illesztőprogramhoz van csatolva, és a Spark egy elosztott feldolgozó motor, nem minden művelet tud közvetlenül hozzáférni az adatokhoz. Tegyük fel, hogy át kell helyeznie az adatokat az illesztőprogram fájlrendszeréből a Unity Catalog-kötetekbe. Ebben az esetben mágikus parancsok vagy a Databricks segédprogramokhasználatával másolhat fájlokat, ahogyan az alábbi példákban is látható:

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>

További erőforrások

További információ a helyi fájlok feltöltéséről vagy internetes fájlok Azure Databricksbe való letöltéséről: Fájlok feltöltése az Azure Databricksbe.