renv
no Azure Databricks
renv é um pacote de R que permite aos usuários gerenciar dependências de R específicas para o notebook.
Usando renv
, você pode criar e gerenciar o ambiente de biblioteca R para seu projeto, salvar o estado dessas bibliotecas em um lockfile
e, posteriormente, restaurar bibliotecas conforme necessário. Juntas, essas ferramentas podem ajudar a tornar os projetos mais isolados, portáteis e reproduzíveis.
Fluxo de trabalho básico renv
Nesta seção:
- Instalar
renv
- Inicializar sessão
renv
com bibliotecas de R pré-instaladas - Usar
renv
para instalar pacotes adicionais - Usar
renv
para salvar seu ambiente de notebook R em DBFS - Reinstalar um ambiente
renv
dado umlockfile
do DBFS
Instalarrenv
:
Você pode instalar renv
como uma biblioteca com escopo de cluster ou como uma biblioteca com escopo de notebook. Para instalar renv
como uma biblioteca com escopo de notebook, use:
require(devtools)
install_version(
package = "renv",
repos = "http://cran.us.r-project.org"
)
A Databricks recomenda usar um instantâneo CRAN como repositório para corrigir a versão do pacote.
Inicializar sessão renv
com bibliotecas de R pré-instaladas
A primeira etapa ao usar renv
é inicializar uma sessão usando renv::init()
. Defina libPaths
para alterar o local de download padrão para ser o caminho da biblioteca no escopo do notebook R.
renv::init(settings = list(external.libraries=.libPaths()))
.libPaths(c(.libPaths()[2], .libPaths())
Usar renv
para instalar pacotes adicionais
Agora você pode usar a API do renv
para instalar e remover pacotes do R. Por exemplo, para instalar a versão mais recente do digest
, execute o seguinte dentro de uma célula do notebook.
renv::install("digest")
Para instalar uma versão antiga do digest
, execute o seguinte dentro de uma célula do notebook.
renv::install("digest@0.6.18")
Para instalar digest
a partir do GitHub, execute o seguinte dentro de uma célula do notebook.
renv::install("eddelbuettel/digest")
Para instalar um pacote do Bioconductor, execute o seguinte dentro de uma célula do notebook.
# (note: requires the BiocManager package)
renv::install("bioc::Biobase")
Observe que a API renv::install
usa o Cache renv.
Usar renv
para salvar seu ambiente de notebook R em DBFS
Execute o comando a seguir uma vez antes de salvar o ambiente.
renv::settings$snapshot.type("all")
Isso configura renv
para fazer um instantâneo de todos os pacotes instalados em libPaths
, não apenas os que estão sendo usados atualmente no notebook. Confira a documentação do renv para obter mais informações.
Agora você pode executar o seguinte dentro de uma célula do notebook para salvar o estado atual do seu ambiente.
renv::snapshot(lockfile="/dbfs/PATH/TO/WHERE/YOU/WANT/TO/SAVE/renv.lock", force=TRUE)
Isso atualiza o lockfile
capturando todos os pacotes instalados em libPaths
. Ele também move seu lockfile
do sistema de arquivos local para o DBFS, onde ele persiste mesmo que seu cluster seja encerrado ou reiniciado.
Reinstalar um ambiente renv
dado um lockfile
do DBFS
Primeiro, garanta que seu novo cluster esteja executando uma versão do Databricks Runtime idêntica àquela em que você criou o ambiente renv
. Isso garante que os pacotes do R pré-instalados sejam idênticos. Você pode encontrar uma lista delas nas notas sobre a versão de cada tempo de execução. Depois de Instalar o renv, execute o seguinte dentro de uma célula do notebook.
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"))
Isso copia o lockfile
do DBFS para o sistema de arquivos local e restaura todos os pacotes especificados no lockfile
.
Observação
Para evitar erros de repositório ausentes, exclua os pacotes Rserve
e SparkR
da restauração de pacote. Ambos os pacotes são pré-instalados em todos os tempos de execução.
renv
Cache
Um recurso muito útil de renv
é o cache de pacote global, que é compartilhado por todos os projetos renv
no cluster. Ele acelera os tempos de instalação e economiza espaço em disco. O cache renv
não armazena em cache os pacotes baixados por meio da API devtools
ou install.packages()
com outros argumentos adicionais que não sejam pkgs
.