Работа с файлами в Azure Databricks

Azure Databricks предоставляет несколько служебных программ и API для взаимодействия с файлами в следующих расположениях:

  • Тома каталога Unity
  • Файлы рабочей области
  • Хранилище облачных объектов
  • Подключения DBFS и корневой каталог DBFS
  • Эфемерное хранилище, подключенное к узлу драйвера кластера

В этой статье приведены примеры взаимодействия с файлами в этих расположениях для следующих средств:

  • Apache Spark
  • Sql Spark и Databricks SQL
  • Utitlities файловой системы Databricks (dbutils.fs или %fs)
  • Интерфейс командной строки Databricks
  • REST API Databricks
  • Команды оболочки Bash (%sh)
  • Установка библиотеки с область записной книжкой%pip
  • Pandas.
  • Программы управления файлами и обработки OSS Python

Внимание

Операции с файлами, требующие доступа FUSE к данным, не могут напрямую получить доступ к облачному хранилищу объектов с помощью URI. Databricks рекомендует использовать тома каталога Unity для настройки доступа к этим расположениям для FUSE.

Scala не поддерживает FUSE для томов каталога Unity или файлов рабочей области на вычислительных ресурсах, настроенных с одним режимом доступа пользователей или кластерами без каталога Unity. Scala поддерживает FUSE для томов каталога Unity и файлов рабочей области для вычислений, настроенных с помощью каталога Unity и режима общего доступа.

Нужно ли предоставить схему URI для доступа к данным?

Пути доступа к данным в Azure Databricks соответствуют одному из следующих стандартов:

  • Пути стиля URI включают схему URI. Для решений доступа к данным на основе Databricks схемы URI являются необязательными для большинства вариантов использования. При непосредственном доступе к данным в облачном хранилище объектов необходимо предоставить правильную схему URI для типа хранилища.

    Схема путей URI

  • Пути в стиле POSIX предоставляют доступ к данным относительно корневого каталога драйвера (/). Пути в стиле POSIX никогда не требуют схемы. Вы можете использовать тома каталога Unity или подключения DBFS для предоставления доступа к данным в облачном хранилище объектов в стиле POSIX. Многие платформы машинного обучения и другие модули Python OSS требуют FUSE и могут использовать только пути в стиле POSIX.

    Схема путей POSIX

Работа с файлами в томах каталога Unity

Databricks рекомендует использовать тома каталога Unity для настройки доступа к файлам не табличных данных, хранящимся в облачном хранилище объектов. См. статью "Создание и работа с томами".

Средство Пример
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Sql Spark и Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Служебные программы файловой системы Databricks dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Интерфейс командной строки Databricks databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
REST API Databricks POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Команды оболочки Bash %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Установка библиотеки %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')
OSS Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Примечание.

Схема dbfs:/ требуется при работе с интерфейсом командной строки Databricks.

Ограничения томов

Тома имеют следующие ограничения:

  • Прямые или не последовательные (случайные) записи, такие как запись ZIP-файлов и файлов Excel, не поддерживаются. Для рабочих нагрузок прямого добавления или случайной записи сначала выполните операции на локальном диске, а затем скопируйте результаты в тома каталога Unity. Например:

    # 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')
    
  • Разреженные файлы не поддерживаются. Чтобы скопировать разреженные файлы, используйте 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
    

Работа с файлами рабочей области

Файлы рабочей области Databricks — это набор файлов в рабочей области, которые не являются записными книжками. Файлы рабочей области можно использовать для хранения и доступа к данным и другим файлам, сохраненным вместе с записными книжками и другими ресурсами рабочей области. Так как файлы рабочей области имеют ограничения на размер, Databricks рекомендует хранить только небольшие файлы данных здесь в первую очередь для разработки и тестирования.

Средство Пример
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Sql Spark и Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Служебные программы файловой системы Databricks dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Интерфейс командной строки Databricks databricks workspace list
REST API Databricks POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Команды оболочки Bash %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Установка библиотеки %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')

Примечание.

Схема file:/ требуется при работе с служебными программами Databricks, Apache Spark или SQL.

Ограничения файлов рабочей области

Файлы рабочей области имеют следующие ограничения:

  • Размер файла рабочей области ограничен 500 МБ из пользовательского интерфейса. Максимальный размер файла, разрешенный при записи из кластера, составляет 256 МБ.

  • Если рабочий процесс использует исходный код, расположенный в удаленном репозитории Git, вы не можете записать в текущий каталог или написать с помощью относительного пути. Запись данных в другие параметры расположения.

  • Команды нельзя использовать git при сохранении в файлах рабочей области. Создание каталогов запрещено в файлах .git рабочей области.

  • Существует ограниченная поддержка операций файлов рабочей области из бессерверных вычислений.

  • Исполнители не могут записывать файлы рабочей области.

  • Символы не поддерживаются.

  • Доступ к файлам рабочей области невозможно получить из определяемых пользователем функций (UDFS) в кластерах с режимом общего доступа.

Куда идут удаленные файлы рабочей области?

Удаление файла рабочей области отправляет его в корзину. Вы можете восстановить или окончательно удалить файлы из корзины с помощью пользовательского интерфейса.

Дополнительные сведения см. в разделе Удаление объекта.

Работа с файлами в облачном хранилище объектов

Databricks рекомендует использовать тома каталога Unity для настройки безопасного доступа к файлам в облачном хранилище объектов. Если вы решили напрямую получить доступ к данным в облачном хранилище объектов с помощью URI, необходимо настроить разрешения. См. раздел "Управление внешними расположениями", "Внешние таблицы" и "Внешние тома".

В следующих примерах используются URI для доступа к данным в облачном хранилище объектов:

Средство Пример
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Sql Spark и 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 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 Не поддерживается
REST API Databricks Не поддерживается
Команды оболочки Bash Не поддерживается
Установка библиотеки %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandas. Не поддерживается
OSS Python Не поддерживается

Примечание.

Облачное хранилище объектов не поддерживает сквозное руководство по учетным данным.

Работа с файлами в подключениях DBFS и корневом каталоге DBFS

Подключения DBFS не являются защищаемыми с помощью каталога Unity и больше не рекомендуются Databricks. Данные, хранящиеся в корневом каталоге DBFS, доступны всем пользователям в рабочей области. Databricks рекомендует хранить конфиденциальный или рабочий код или данные в корневом каталоге DBFS. См. раздел Что такое файловая система Databricks (DBFS)?.

Средство Пример
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Sql Spark и Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Служебные программы файловой системы Databricks dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Интерфейс командной строки Databricks databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
REST API Databricks POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Команды оболочки Bash %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Установка библиотеки %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')

Примечание.

Схема dbfs:/ требуется при работе с интерфейсом командной строки Databricks.

Работа с файлами в эфемерном хранилище, подключенном к узлу драйвера

Ephermal storage, присоединенное к узлу драйвера, — это блочное хранилище с собственным доступом к пути на основе POSIX. Все данные, хранящиеся в этом расположении, исчезают при завершении или перезапуске кластера.

Средство Пример
Apache Spark Не поддерживается
Sql Spark и Databricks SQL Не поддерживается
Служебные программы файловой системы Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Интерфейс командной строки Databricks Не поддерживается
REST API Databricks Не поддерживается
Команды оболочки Bash %sh curl http://<address>/text.zip > /tmp/text.zip
Установка библиотеки Не поддерживается
Pandas. df = pd.read_csv('/path/to/data.csv')
OSS Python os.listdir('/path/to/directory')

Примечание.

Схема file:/ требуется при работе с служебными программами Databricks.

Перемещение данных из эфемерного хранилища в тома

Возможно, вам потребуется получить доступ к данным, скачанным или сохраненным в эфемерное хранилище с помощью Apache Spark. Так как эфемерное хранилище подключено к драйверу, а Spark — это распределенный обработчик обработки, а не все операции могут напрямую обращаться к данным здесь. Если необходимо переместить данные из файловой системы драйвера в тома каталога Unity, можно скопировать файлы с помощью магических команд или служебных программ Databricks, как показано в следующих примерах:

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>