Поделиться через


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

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

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

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

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

Важный

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

Scala поддерживает FUSE для томов каталога Unity и файлов рабочей области для вычислений, настроенных с помощью каталога Unity и режима общего доступа. При вычислительных системах, настроенных с режимом доступа для одного пользователя и при использовании среды выполнения Databricks версии 14.3 и выше, Scala поддерживает FUSE для томов Unity Catalog и файлов рабочих областей, за исключением подпроцессов, происходящих из Scala, таких как команда Scala "cat /Volumes/path/to/file".!!.

Spark и другие процессы JVM могут получать доступ только к томам каталога Unity или файлам рабочей области с помощью средств чтения и записи, поддерживающих каталог Unity. Например, нельзя указать JAR-файл в качестве зависимости в конфигурации Spark и использовать пользовательские источники данных PySpark. Если у вас есть нагрузка на JVM, связанная с библиотеками, которым нужно получать доступ к файлам в томах или в файлах рабочей области, скопируйте эти файлы в локальное вычислительное хранилище с помощью команд на Python или в оболочке, таких как %sh mv.. Не используйте %fs или dbutils.fs, которые используют JVM. Если файл должен присутствовать во время запуска кластера, используйте скрипт инициализации для первого перемещения файла. См. Что такое скрипты инициализации?.

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

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

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

    схема путей URI

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

    схема путей POSIX

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

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

Инструмент Пример
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL и 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/
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 %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
Панды df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
ПО с открытым исходным кодом Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Заметка

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

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

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

  • Операции записи данных, такие как прямая запись или несистематические (случайные) записи, включая запись 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()
Spark SQL и 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
Databricks REST API 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
Панды df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
ПО с открытым исходным кодом Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Заметка

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

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

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

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

См. Удалить объект.

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

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()
Spark SQL и 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 Не поддерживается
Databricks REST API Не поддерживается
Команды оболочки Bash Не поддерживается
Установка библиотеки %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Панды Не поддерживается
ПО с открытым исходным кодом Python Не поддерживается

Заметка

Работа с файлами в маунтах DBFS и корневом каталоге DBFS

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

Инструмент Пример
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL и 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
Databricks REST API 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
Панды df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
ПО с открытым исходным кодом Python os.listdir('/dbfs/mnt/path/to/directory')

Заметка

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

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

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

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

Дополнительные ресурсы

Сведения о загрузке локальных файлов или скачивании файлов из интернета в Azure Databricks см. в загрузка файлов в Azure Databricks.