renv
в Azure Databricks
renv — это пакет R, который позволяет пользователям управлять зависимостями R, характерными для записной книжки.
С помощью renv
можно создать среду библиотекИ R для проекта и управлять ими, сохранить состояние этих библиотек в lockfile
и более поздних restore библиотек по мере необходимости. Вместе эти инструменты могут помочь сделать проекты более изолированными, переносимыми и воспроизводимыми.
Базовый рабочий процесс renv
В этом разделе рассматриваются следующие вопросы.
-
Установка
renv
-
Инициализация сеанса
renv
с предварительно установленными библиотеками R -
Использование
renv
для установки дополнительных пакетов -
Использование
renv
для сохранения среды записной книжки R в DBFS -
Повторная установка среды
renv
с учетомlockfile
из DBFS
Установка 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
.