Работа с модулями Python и R
В этой статье описывается, как использовать относительные пути для импорта пользовательских модулей Python и R, хранящихся в файлах рабочей области вместе с записными книжками Databricks. Файлы рабочей области могут упростить более жесткие жизненные циклы разработки, позволяя модульизировать код, преобразовать команды %run в инструкции импорта и рефакторинг файлов колес Python в совместно версиях модулей. Для тестирования кода можно также использовать встроенный веб-терминал Databricks.
Примечание.
В Databricks Runtime 14.0 и выше текущий рабочий каталог по умолчанию (CWD) для кода, выполняемого локально, — это каталог, содержащий записную книжку или скрипт, выполняемый. Это изменение поведения из Databricks Runtime 13.3 LTS и ниже. См. раздел " Что такое текущий рабочий каталог по умолчанию?".
Импорт модулей Python и R
Внимание
В Databricks Runtime 13.3 LTS и более поздних версиях каталоги, добавленные в Python или каталоги, структурированные как пакеты Pythonsys.path
, автоматически распределяются всем исполнителям в кластере. В Databricks Runtime 12.2 LTS и ниже библиотеки, добавленные в sys.path
него, должны быть явно установлены на исполнителях.
В Databricks Runtime 11.3 LTS и более поздних версиях текущий рабочий каталог записной книжки автоматически добавляется в путь Python. Если вы используете папки Git, добавляется корневой каталог репозитория.
Чтобы импортировать модули из другого каталога, необходимо добавить каталог, содержащий модуль sys.path
. Каталоги можно указать с помощью относительного пути, как показано в следующем примере:
import sys
import os
sys.path.append(os.path.abspath('..'))
Функции импортируются из модуля, хранящегося в файлах рабочей области, так же, как и из модуля, сохраненного в виде библиотеки кластера или библиотеки с область записной книжкой:
Python
from sample import power
power.powerOfTwo(3)
R
source("sample.R")
power.powerOfTwo(3)
Внимание
При использовании инструкции import
Databricks следует заданному приоритету, если существуют несколько библиотек одного и того же имени. Ознакомьтесь с приоритетом библиотеки Python.
Автоматическая перезагрузка модулей Python
При редактировании нескольких файлов при разработке кода Python можно использовать следующие команды в любой ячейке записной книжки или файле Python для принудительной перезагрузки всех модулей:
%load_ext autoreload
%autoreload 2
Обратите внимание, что автозагрузка работает только с драйвером и не перезагрузит код в исполнитель для определяемых пользователем файлов.
Рефакторинг кода
Для разработки кода рекомендуется разделять его на модули для удобства повторного использования. Вы можете создать пользовательские файлы Python с файлами рабочей области и сделать код в этих файлах доступным для записной книжки с помощью инструкции import
.
Рефакторинг кода записной книжки в файлы, которые можно использовать повторно:
- Создайте новый файл исходного кода для вашего кода.
- Добавьте в записную книжку инструкции импорта Python, чтобы сделать код в новом файле доступным для записной книжки.
Миграция из %run
команд
Если вы используете %run
команды для создания функций Python или R, определенных в записной книжке, доступной для другой записной книжки или установки пользовательских файлов в кластере, рассмотрите возможность включения этих пользовательских .whl
модулей в виде файлов рабочей области. Таким образом можно обеспечить синхронизацию записных книжек и других модулей кода, чтобы записная книжка всегда использовала правильную версию.
Команды %run
позволяют включить одну записную книжку в другую и часто используются, чтобы обеспечить доступ к коду Python или R из записной книжки. В этом примере записная книжка с именем power.py
содержит приведенный ниже код.
# This code is in a notebook named "power.py".
def n_to_mth(n,m):
print(n, "to the", m, "th power is", n**m)
Затем можно сделать функции, определенные в power.py
, доступными для другой записной книжки, с помощью команды %run
:
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
С помощью файлов рабочей области можно напрямую импортировать модуль, содержащий код Python, и запустить функцию.
from power import n_to_mth
n_to_mth(3, 4)
Рефакторинг файлов Python .whl
в относительные библиотеки
Вы можете установить пользовательские файлы .whl
в кластер, а затем импортировать их в записную книжку, подключенную к этому кластеру. Для кода, который часто обновляется, этот процесс может быть громоздким и подверженным ошибкам. Файлы рабочей области позволяют хранить эти файлы Python в одном каталоге с записными книжками, использующими код, гарантируя, что записная книжка всегда использует правильную версию.
Дополнительные сведения об упаковке проектов Python см. в этом руководстве.
Использование веб-терминала Azure Databricks для тестирования
Вы можете использовать веб-терминал Azure Databricks для тестирования изменений в коде Python или R без необходимости импортировать файл в записную книжку и выполнять записную книжку.
- Откройте веб-терминал.
- Перейдите в каталог:
cd /Workspace/Users/<path-to-directory>/
- Запустите файл Python или R:
python file_name.py
илиRscript file_name.r
.