Práce se soubory na platformě Azure Databricks

Azure Databricks poskytuje několik nástrojů a rozhraní API pro interakci se soubory v následujících umístěních:

  • Svazky katalogu Unity
  • Soubory pracovního prostoru
  • Cloudové úložiště objektů
  • Připojení DBFS a kořen DBFS
  • Dočasné úložiště připojené k uzlu ovladače clusteru

Tento článek obsahuje příklady pro interakci se soubory v těchto umístěních pro následující nástroje:

  • Apache Spark
  • Spark SQL a Databricks SQL
  • Databricks systém souborů utitlities (dbutils.fs nebo %fs)
  • Databricks CLI
  • Databricks REST API
  • Příkazy prostředí Bash (%sh)
  • Instalace knihoven s vymezeným poznámkovým blokem pomocí %pip
  • Pandy
  • Nástroje pro správu a zpracování souborů Pythonu v OSS

Důležité

Operace se soubory, které vyžadují přístup fUSE k datům, nemají přímý přístup ke cloudovému úložišti objektů pomocí identifikátorů URI. Databricks doporučuje použít svazky katalogu Unity ke konfiguraci přístupu k těmto umístěním pro FUSE.

Scala nepodporuje FUSE pro svazky katalogu Unity ani soubory pracovních prostorů na výpočetních prostředcích nakonfigurovaných s režimem přístupu jednoho uživatele nebo clustery bez katalogu Unity. Scala podporuje FUSE pro svazky katalogu Unity a soubory pracovních prostorů na výpočetních prostředcích nakonfigurovaných pomocí katalogu Unity a režimu sdíleného přístupu.

Musím pro přístup k datům zadat schéma identifikátoru URI?

Cesty přístupu k datům v Azure Databricks se řídí jedním z následujících standardů:

  • Cesty ve stylu identifikátoru URI zahrnují schéma identifikátoru URI. Pro řešení přístupu k datům nativních pro Databricks jsou schémata identifikátorů URI volitelná pro většinu případů použití. Při přímém přístupu k datům v cloudovém úložišti objektů musíte zadat správné schéma identifikátoru URI pro typ úložiště.

    Diagram cest identifikátorů URI

  • Cesty ve stylu POSIX poskytují přístup k datům vzhledem ke kořenovému adresáři ovladače (/). Cesty stylu POSIX nikdy nevyžadují schéma. Svazky katalogu Unity nebo připojení DBFS můžete použít k zajištění přístupu k datům ve stylu POSIX v cloudovém úložišti objektů. Mnoho architektur ML a dalších modulů OSS Python vyžaduje FUSE a může používat pouze cesty ve stylu POSIX.

    Diagram cest POSIX

Práce se soubory ve svazcích katalogu Unity

Databricks doporučuje použít svazky katalogu Unity ke konfiguraci přístupu k ne tabulkovým datovým souborům uloženým v cloudovém úložišti objektů. Viz Vytvoření svazků a práce se svazky.

Nástroj Příklad
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL a Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Nástroje systému souborů Databricks 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"}],},...]}
Příkazy prostředí Bash %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Instalace knihoven %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandy 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')

Poznámka:

Schéma dbfs:/ se vyžaduje při práci s rozhraním příkazového řádku Databricks.

Omezení svazků

Svazky mají následující omezení:

  • Přímé nebo nesekvenční (náhodné) zápisy, například zápis souborů ZIP a Excelu, nejsou podporovány. U úloh přímého připojení nebo náhodného zápisu nejprve proveďte operace na místním disku a pak výsledky zkopírujte do svazků katalogu Unity. Příklad:

    # 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')
    
  • Řídké soubory nejsou podporovány. Pokud chcete kopírovat řídké soubory, použijte 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
    

Práce se soubory pracovního prostoru

Soubory pracovního prostoru Databricks jsou sadou souborů v pracovním prostoru, který nejsou poznámkovými bloky. Soubory pracovního prostoru můžete použít k ukládání a přístupu k datům a dalším souborům uloženým společně s poznámkovými bloky a dalšími prostředky pracovního prostoru. Vzhledem k tomu, že soubory pracovního prostoru mají omezení velikosti, databricks doporučuje ukládat jenom malé datové soubory, a to především pro vývoj a testování.

Nástroj Příklad
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL a Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Nástroje systému souborů Databricks 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"}
Příkazy prostředí Bash %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Instalace knihoven %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandy df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
OSS Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Poznámka:

Schéma file:/ se vyžaduje při práci s nástroji Databricks, Apache Sparkem nebo SQL.

Omezení souborů pracovního prostoru

Soubory pracovního prostoru mají následující omezení:

  • Velikost souboru pracovního prostoru je omezená na 500 MB z uživatelského rozhraní. Maximální povolená velikost souboru při zápisu z clusteru je 256 MB.

  • Pokud váš pracovní postup používá zdrojový kód umístěný ve vzdáleném úložišti Git, nemůžete zapisovat do aktuálního adresáře nebo zapisovat pomocí relativní cesty. Zapisujte data do jiných možností umístění.

  • Příkazy nelze použít git při ukládání do souborů pracovního prostoru. Vytváření adresářů .git není v souborech pracovního prostoru povolené.

  • Z výpočetních prostředků bez serveru existuje omezená podpora operací se soubory pracovního prostoru.

  • Exekutory nemohou zapisovat do souborů pracovního prostoru.

  • Symlinky nejsou podporovány.

  • K souborům pracovního prostoru nelze přistupovat z uživatelem definovaných funkcí (UDF) v clusterech s režimem sdíleného přístupu.

Kde jsou odstraněné soubory pracovního prostoru?

Odstraněním souboru pracovního prostoru se odešle do koše. Soubory můžete obnovit nebo trvale odstranit z koše pomocí uživatelského rozhraní.

Viz Odstranění objektu.

Práce se soubory v cloudovém úložišti objektů

Databricks doporučuje používat svazky katalogu Unity ke konfiguraci zabezpečeného přístupu k souborům v cloudovém úložišti objektů. Pokud se rozhodnete přímo přistupovat k datům v cloudovém úložišti objektů pomocí identifikátorů URI, musíte nakonfigurovat oprávnění. Viz Správa externích umístění, externích tabulek a externích svazků.

Následující příklady používají identifikátory URI pro přístup k datům v cloudovém úložišti objektů:

Nástroj Příklad
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL a 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';
Nástroje systému souborů Databricks 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 Nepodporováno
Databricks REST API Nepodporováno
Příkazy prostředí Bash Nepodporováno
Instalace knihoven %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandy Nepodporováno
OSS Python Nepodporováno

Poznámka:

Cloudové úložiště objektů nepodporuje předávání přihlašovacích údajů.

Práce se soubory v připojeních DBFS a kořenovém adresáři DBFS

Připojení DBFS se nedají zabezpečit pomocí katalogu Unity a databricks už nedoporučují. Data uložená v kořenovém adresáři DBFS jsou přístupná všem uživatelům v pracovním prostoru. Databricks doporučuje ukládat jakýkoli citlivý nebo produkční kód nebo data do kořenového adresáře DBFS. Podívejte se, co je systém souborů Databricks (DBFS)?

Nástroj Příklad
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL a Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Nástroje systému souborů Databricks 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" }'
Příkazy prostředí Bash %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Instalace knihoven %pip install /dbfs/mnt/path/to/my_library.whl
Pandy df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
OSS Python os.listdir('/dbfs/mnt/path/to/directory')

Poznámka:

Schéma dbfs:/ se vyžaduje při práci s rozhraním příkazového řádku Databricks.

Práce se soubory v dočasném úložišti připojeném k uzlu ovladače

Šifrované úložiště připojené k uzlu ovladače je blokové úložiště s nativním přístupem k cestě založené na POSIX. Všechna data uložená v tomto umístění zmizí, když se cluster ukončí nebo restartuje.

Nástroj Příklad
Apache Spark Nepodporováno
Spark SQL a Databricks SQL Nepodporováno
Nástroje systému souborů Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks CLI Nepodporováno
Databricks REST API Nepodporováno
Příkazy prostředí Bash %sh curl http://<address>/text.zip > /tmp/text.zip
Instalace knihoven Nepodporováno
Pandy df = pd.read_csv('/path/to/data.csv')
OSS Python os.listdir('/path/to/directory')

Poznámka:

Schéma file:/ se vyžaduje při práci s nástroji Databricks.

Přesun dat z dočasného úložiště do svazků

Možná budete chtít přistupovat k datům staženým nebo uloženým do dočasného úložiště pomocí Apache Sparku. Vzhledem k tomu, že dočasné úložiště je připojené k ovladači a Spark je distribuovaný modul pro zpracování, ne všechny operace můžou přímo přistupovat k datům. Pokud potřebujete přesunout data ze systému souborů ovladače do svazků katalogu Unity, můžete kopírovat soubory pomocí příkazů magic nebo nástrojů Databricks, jako v následujících příkladech:

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>