Работа с файлами в Azure Databricks
Azure Databricks имеет несколько служебных программ и API для взаимодействия с файлами в следующих расположениях:
- Тома каталога Unity
- Файлы рабочей области
- Хранилище облачных объектов
- Подключения DBFS и корневой каталог DBFS
- Эфемерное хранилище, подключенное к узлу драйвера кластера
В этой статье приведены примеры взаимодействия с файлами в этих расположениях для следующих средств:
- Apache Spark
- Sql Spark и Databricks SQL
- Служебные программы файловой системы Databricks (
dbutils.fs
или%fs
) - Интерфейс командной строки Databricks
- REST API Databricks
- Команды оболочки Bash (
%sh
) - Установка библиотеки с областью действия записной книжки с помощью
%pip
- pandas
- Программы управления файлами и обработки OSS Python
Внимание
Операции с файлами, требующие доступа к данным FUSE, не могут напрямую получить доступ к облачному хранилищу объектов с помощью URI. Databricks рекомендует использовать тома каталога Unity для настройки доступа к этим расположениям для FUSE.
Scala поддерживает FUSE для томов каталога Unity и файлов рабочей области для вычислений, настроенных с помощью каталога Unity и режима общего доступа. При вычислении, настроенном с использованием режима доступа к одному пользователю и Databricks Runtime 14.3 и более поздних версий, Scala поддерживает FUSE для томов каталога Unity и файлов рабочих областей, за исключением подпроцессов, исходящих из Scala, таких как команда "cat /Volumes/path/to/file".!!
Scala.
Нужно ли предоставить схему URI для доступа к данным?
Пути доступа к данным в Azure Databricks соответствуют одному из следующих стандартов:
Пути стиля URI включают схему URI. Для решений доступа к данным на основе Databricks схемы URI являются необязательными для большинства вариантов использования. При непосредственном доступе к данным в облачном хранилище объектов необходимо предоставить правильную схему URI для типа хранилища.
Пути в стиле POSIX предоставляют доступ к данным относительно корневого каталога драйвера (
/
). Пути в стиле POSIX никогда не требуют схемы. Вы можете использовать тома каталога Unity или подключения DBFS для предоставления доступа к данным в облачном хранилище объектов в стиле POSIX. Многие платформы машинного обучения и другие модули Python OSS требуют FUSE и могут использовать только пути в стиле POSIX.
Работа с файлами в томах каталога Unity
Databricks рекомендует использовать тома каталога Unity для настройки доступа к файлам не табличных данных, хранящимся в облачном хранилище объектов. См. раздел "Что такое тома каталога 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
рабочей области.Чтение из файлов рабочей области с помощью исполнителей Spark (например
spark.read.format("csv").load("file:/Workspace/Users/<user-folder>/data.csv")
, не поддерживается с бессерверными вычислениями).Исполнители не могут записывать файлы рабочей области.
Символьные ссылки поддерживаются для целевых каталогов в корневой папке
/Workspace
.Файлы рабочей области не могут быть доступны из определяемых пользователем функций (ОПРЕДЕЛ) в кластерах с режимом общего доступа в Databricks Runtime 14.2 и ниже.
Куда идут удаленные файлы рабочей области?
Удаление файла рабочей области отправляет его в корзину. Вы можете восстановить или окончательно удалить файлы из корзины с помощью пользовательского интерфейса.
Дополнительные сведения см. в разделе Удаление объекта.
Работа с файлами в облачном хранилище объектов
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. См. раздел "Что такое 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.
Работа с файлами в эфемерном хранилище, подключенном к узлу драйвера
Эфемерное хранилище, подключенное к узлу драйвера, — это блочное хранилище со встроенным доступом к пути на основе 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>
Дополнительные ресурсы
Сведения о передаче локальных файлов или скачивании файлов Интернета в Azure Databricks см. в статье "Отправка файлов в Azure Databricks".