Работа с файлами в 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 для типа хранилища.
Пути, соответствующие 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.