Работа с модулями 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 .

Рефакторинг кода записной книжки в файлы, которые можно использовать повторно:

  1. Создайте новый файл исходного кода для вашего кода.
  2. Добавьте в записную книжку инструкции импорта 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 без необходимости импортировать файл в записную книжку и выполнять записную книжку.

  1. Откройте веб-терминал.
  2. Перейдите в каталог: cd /Workspace/Users/<path-to-directory>/
  3. Запустите файл Python или R: python file_name.py или Rscript file_name.r.