Поделиться через


renv в Azure Databricks

renv — это пакет R, который позволяет пользователям управлять зависимостями R, характерными для записной книжки.

С помощью renvможно создать среду библиотекИ R для проекта и управлять ими, сохранить состояние этих библиотек в lockfileи более поздних restore библиотек по мере необходимости. Вместе эти инструменты могут помочь сделать проекты более изолированными, переносимыми и воспроизводимыми.

Базовый рабочий процесс renv

В этом разделе рассматриваются следующие вопросы.

Установка renv

Вы можете установить renv как библиотеку с областью действия кластера или записной книжки. Для установки renv в качестве библиотеки с областью действия записной книжки:

require(devtools)

install_version(
  package = "renv",
  repos   = "http://cran.us.r-project.org"
)

Databricks рекомендует использовать моментальный снимок CRAN в качестве репозитория для исправления версии пакета.

Инициализация сеанса renv с предварительно установленными библиотеками R

Первый шаг при использовании renv — инициализация сеанса с помощью renv::init(). Set libPaths изменить расположение загрузки по умолчанию на путь библиотеки с областью действия вашей записной книжки R .

renv::init(settings = list(external.libraries=.libPaths()))
.libPaths(c(.libPaths()[2], .libPaths())

Использование renv для установки дополнительных пакетов

Теперь вы можете использовать API renvдля установки пакетов R и remove. Например, чтобы установить последнюю версию digest, выполните следующий код в ячейке записной книжки.

renv::install("digest")

Чтобы установить старую версию digest, выполните следующий код в ячейке записной книжки.

renv::install("digest@0.6.18")

Чтобы установить digest из GitHub, выполните следующий код в ячейке записной книжки.

renv::install("eddelbuettel/digest")

Чтобы установить пакет из Bioconductor, выполните следующий код в ячейке записной книжки.

# (note: requires the BiocManager package)
renv::install("bioc::Biobase")

Обратите внимание, что API renv::install использует кэш renv.

Использование renv для сохранения среды записной книжки R в DBFS

Перед сохранением среды выполните следующую команду.

renv::settings$snapshot.type("all")

Это задает renv для создания моментального снимка всех пакетов, установленных в libPaths, а не только тех, которые сейчас используются в записной книжке. Дополнительные сведения см. в документации по renv.

Теперь вы можете выполнить следующий код внутри ячейки записной книжки, чтобы сохранить текущее состояние вашей среды.

renv::snapshot(lockfile="/dbfs/PATH/TO/WHERE/YOU/WANT/TO/SAVE/renv.lock", force=TRUE)

Это действие обновит lockfile, регистрируя все пакеты, установленные в libPaths. Он также перемещает lockfile из локальной файловой системы в DBFS, where сохраняется, даже если кластер завершает работу или перезапускается.

Повторная установка среды renv с учетом lockfile из DBFS

Во-первых, убедитесь, что ваш новый кластер работает с той же версией Databricks Runtime, что и та, в которой вы впервые создали среду renv. Это гарантирует идентичность предварительно установленных пакетов R. В заметках о выпуске для каждой среды выполненияможно найти эти list. После установки renv выполните следующий код в ячейке записной книжки.

renv::init(settings = list(external.libraries=.libPaths()))
.libPaths(c(.libPaths()[2], .libPaths()))
renv::restore(lockfile="/dbfs/PATH/TO/WHERE/YOU/SAVED/renv.lock", exclude=c("Rserve", "SparkR"))

Файл lockfile будет скопирован из DBFS в локальную файловую систему и будут восстановлены все пакеты, указанные в lockfile.

Примечание.

Чтобы избежать ошибок, связанных с отсутствующим репозиторием, исключите пакеты Rserve и SparkR из процесса восстановления пакетов. Оба этих пакета предварительно устанавливаются во всех средах выполнения.

renv Кэш

Очень полезная функция renv — это глобальный кэш пакетов, который является общим для всех проектов renv в кластере. Его использование ускоряет установку и экономит место на диске. Кэш renv не кэширует пакеты, скачанные через API devtools или install.packages() с какими-либо дополнительными аргументами, кроме pkgs.