Werken met bestanden in Azure Databricks
Azure Databricks heeft meerdere hulpprogramma's en API's voor interactie met bestanden op de volgende locaties:
- Unity Catalog-volumes
- Werkruimtebestanden
- Cloudobjectopslag
- DBFS-koppelingen en DBFS-hoofdmap
- Tijdelijke opslag die is gekoppeld aan het stuurprogrammaknooppunt van het cluster
Dit artikel bevat voorbeelden voor interactie met bestanden op deze locaties voor de volgende hulpprogramma's:
- Apache Spark
- Spark SQL en Databricks SQL
- Hulpprogramma's voor bestandsysteem van Databricks (
dbutils.fs
of%fs
) - Databricks CLI
- Databricks REST API
- Bash-shellopdrachten (
%sh
) - Bibliotheekinstallaties met notebookbereik met behulp van
%pip
- pandas
- OSS Python-hulpprogramma's voor bestandsbeheer en -verwerking
Belangrijk
Bestandsbewerkingen waarvoor FUSE-gegevenstoegang vereist, hebben geen rechtstreeks toegang tot cloudobjectopslag met behulp van URI's. Databricks raadt het gebruik van Unity Catalog-volumes aan om de toegang tot deze locaties voor FUSE te configureren.
Scala ondersteunt FUSE voor Unity Catalog-volumes en werkruimtebestanden op berekeningen die zijn geconfigureerd met Unity Catalog en toegewezen toegangsmodus (voorheen modus voor gedeelde toegang). Op berekeningen die zijn geconfigureerd met de toegewezen toegangsmodus (voorheen modus voor toegang tot één gebruiker) en Databricks Runtime 14.3 en hoger, ondersteunt Scala FUSE voor Unity Catalog-volumes en werkruimtebestanden, met uitzondering van subprocessen die afkomstig zijn van Scala, zoals de Scala-opdracht "cat /Volumes/path/to/file".!!
.
Spark- en andere JVM-processen hebben alleen toegang tot Unity Catalog-volumes of werkruimtebestanden met behulp van de lezers en schrijvers die Ondersteuning bieden voor Unity Catalog. U kunt bijvoorbeeld geen JAR-bestand opgeven als een afhankelijkheid in een Spark-configuratie en u kunt geen aangepaste gegevensbronnen van PySpark gebruiken. Als u een JVM-werkbelasting hebt van bibliotheken die toegang moeten hebben tot bestanden in volumes of in werkruimtebestanden, kopieert u de bestanden naar de lokale opslag voor compute met behulp van Python- of shell-opdrachten zoals %sh mv.
. Gebruik geen %fs
of dbutils.fs
die gebruikmaakt van de JVM. Als een bestand aanwezig moet zijn tijdens het starten van het cluster, gebruikt u een init-script om het bestand eerst te verplaatsen. Zie Wat zijn init-scripts?.
Moet ik een URI-schema opgeven voor toegang tot gegevens?
Paden voor gegevenstoegang in Azure Databricks volgen een van de volgende standaarden:
Paden in een URI-stijl moeten een URI-schema bevatten. Voor databricks-systeemeigen oplossingen voor gegevenstoegang zijn URI-schema's optioneel voor de meeste gebruiksvoorbeelden. Wanneer u rechtstreeks toegang hebt tot gegevens in de opslag van cloudobjecten, moet u het juiste URI-schema opgeven voor het opslagtype.
diagram met
POSIX-paden bieden gegevenstoegang relatief aan de hoofdmap van het stuurprogramma (
/
). POSIX-paden vereisen nooit een schema. U kunt Unity Catalog volumes of DBFS-mounts gebruiken om POSIX-stijl toegang te bieden tot gegevens in cloudobjectopslag. Voor veel ML-frameworks en andere OSS Python-modules is FUSE vereist en kunnen alleen PADEN in POSIX-stijl worden gebruikt.
Werken met bestanden in Unity Catalog-volumes
Databricks raadt het gebruik van Unity Catalog-volumes aan om toegang te configureren tot niet-tabellaire gegevensbestanden die zijn opgeslagen in cloudobjectopslag. Zie Wat zijn Unity Catalog-volumes?.
Werktuig | Voorbeeld |
---|---|
Apache Spark | spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show() |
Spark SQL en Databricks SQL | SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`; LIST '/Volumes/my_catalog/my_schema/my_volume/'; |
Hulpprogramma's voor databricks-bestandssysteem | 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-shellopdrachten | %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip |
Bibliotheekinstallaties | %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl |
Pandas | df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv') |
Open Source Software Python | os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory') |
Notitie
Het dbfs:/
-schema is vereist bij het werken met de Databricks CLI.
Beperkingen voor volumes
Volumes hebben de volgende beperkingen:
Schrijfbewerkingen voor direct toevoegen of niet-sequentiële (willekeurige) schrijfbewerkingen, zoals het schrijven van Zip- en Excel-bestanden, worden niet ondersteund. Voor direct toevoegen of willekeurige schrijfworkloads moet u eerst de bewerkingen uitvoeren op een lokale schijf en vervolgens de resultaten kopiëren naar Unity Catalog-volumes. Bijvoorbeeld:
# 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')
Sparse-bestanden worden niet ondersteund. Gebruik
cp --sparse=never
om sparse bestanden te kopiëren:$ 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
Werken met werkruimtebestanden
Databricks werkruimtebestanden zijn de bestanden in een werkruimte, die zijn opgeslagen in het werkruimteopslagaccount. U kunt werkruimtebestanden gebruiken om bestanden zoals notebooks, broncodebestanden, gegevensbestanden en andere werkruimteassets op te slaan en te openen. Omdat werkruimtebestanden groottebeperkingen hebben, raadt Databricks aan om hier alleen kleine gegevensbestanden op te slaan voor ontwikkeling en testen.
Werktuig | Voorbeeld |
---|---|
Apache Spark | spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show() |
Spark SQL en Databricks SQL | SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`; |
Hulpprogramma's voor databricks-bestandssysteem | 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-shellopdrachten | %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip |
Installaties van bibliotheeksoftware | %pip install /Workspace/Users/<user-folder>/my_library.whl |
Pandas | df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv') |
OSS Python | os.listdir('/Workspace/Users/<user-folder>/path/to/directory') |
Notitie
Het file:/
schema is vereist bij het werken met Databricks Utilities, Apache Spark of SQL.
Zie Beperkingenvoor de beperkingen in het werken met werkruimtebestanden.
Waar gaan verwijderde werkruimtebestanden naartoe?
Als u een werkruimtebestand verwijdert, wordt het naar de prullenbak verzonden. U kunt bestanden uit de prullenbak herstellen of permanent verwijderen met behulp van de gebruikersinterface.
Werken met bestanden in cloudobjectopslag
Databricks raadt het gebruik van Unity Catalog-volumes aan om beveiligde toegang tot bestanden in cloudobjectopslag te configureren. U moet machtigingen configureren als u ervoor kiest om rechtstreeks toegang te krijgen tot gegevens in de opslag van cloudobjecten met behulp van URI's. Zie Externe locaties, externe tabellen en externe volumes beheren.
In de volgende voorbeelden worden URI's gebruikt voor toegang tot gegevens in de opslag van cloudobjecten:
Werktuig | Voorbeeld |
---|---|
Apache Spark | spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show() |
Spark SQL en 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';
|
Hulpprogramma's voor databricks-bestandssysteem |
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 | Niet ondersteund |
Databricks REST API | Niet ondersteund |
Bash-shellopdrachten | Niet ondersteund |
Bibliotheekinstallaties | %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl |
Pandas | Niet ondersteund |
OSS Python | Niet ondersteund |
Werken met bestanden in DBFS-koppelingen en DBFS-hoofdmap
DBFS-koppelingen zijn niet beveiligbaar met behulp van Unity Catalog en worden niet meer aanbevolen door Databricks. Gegevens die zijn opgeslagen in de DBFS-hoofdmap, zijn toegankelijk voor alle gebruikers in de werkruimte. Databricks raadt af om gevoelige of productiecode of gegevens op te slaan in de DBFS-hoofdmap. Zie Wat is DBFS?.
Werktuig | Voorbeeld |
---|---|
Apache Spark | spark.read.format("json").load("/mnt/path/to/data.json").show() |
Spark SQL en Databricks SQL | SELECT * FROM json.`/mnt/path/to/data.json`; |
Hulpprogramma's voor databricks-bestandssysteem | 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-opdrachten | %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip |
Bibliotheekinstallaties | %pip install /dbfs/mnt/path/to/my_library.whl |
Pandas | df = pd.read_csv('/dbfs/mnt/path/to/data.csv') |
OSS Python | os.listdir('/dbfs/mnt/path/to/directory') |
Notitie
Het dbfs:/
-schema is vereist bij het werken met de Databricks CLI.
Werken met bestanden in tijdelijke opslag die is gekoppeld aan het stuurprogrammaknooppunt
De tijdelijke opslag die is gekoppeld aan het stuurprogrammaknooppunt is blokopslag met ingebouwde op POSIX gebaseerde padtoegang. Alle gegevens die op deze locatie zijn opgeslagen, verdwijnen wanneer een cluster wordt beëindigd of opnieuw wordt opgestart.
Werktuig | Voorbeeld |
---|---|
Apache Spark | Niet ondersteund |
Spark SQL en Databricks SQL | Niet ondersteund |
Hulpprogramma's voor databricks-bestandssysteem | dbutils.fs.ls("file:/path") %fs ls file:/path |
Databricks CLI | Niet ondersteund |
Databricks REST API | Niet ondersteund |
Bash shell-opdrachten | %sh curl http://<address>/text.zip > /tmp/text.zip |
Installationen in de bibliotheek | Niet ondersteund |
Pandas | df = pd.read_csv('/path/to/data.csv') |
Open Source Software Python | os.listdir('/path/to/directory') |
Notitie
Het file:/
-schema is vereist bij het werken met Databricks Utilities.
Gegevens verplaatsen van tijdelijke opslag naar volumes
Mogelijk wilt u toegang krijgen tot gegevens die zijn gedownload of opgeslagen in tijdelijke opslag met behulp van Apache Spark. Omdat tijdelijke opslag is gekoppeld aan het stuurprogramma en Spark een gedistribueerde verwerkingsengine is, hebben niet alle bewerkingen hier rechtstreeks toegang tot gegevens. Stel dat u gegevens van het bestandssysteem van het stuurprogramma moet verplaatsen naar Unity Catalog-volumes. In dat geval kunt u bestanden kopiëren met behulp van magic-opdrachten of de Databricks-hulpprogramma's, zoals in de volgende voorbeelden:
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>
Aanvullende informatiebronnen
Zie Bestanden uploaden naar Azure Databricksvoor informatie over het uploaden van lokale bestanden of het downloaden van internetbestanden naar Azure Databricks.