Работа с файлами в 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
рабочей области.Существует ограниченная поддержка операций файлов рабочей области из бессерверных вычислений.
Исполнители не могут записывать файлы рабочей области.
Символы не поддерживаются.
Файлы рабочей области не могут быть доступны из определяемых пользователем функций (ОПРЕДЕЛ) в кластерах с режимом общего доступа в 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".