Azure Databricks での renv
renv は、ノートブックに固有の R の依存関係をユーザーが管理するための R パッケージです。
renv
を使用すると、プロジェクトの R ライブラリ環境を作成、管理して、それらのライブラリの状態を lockfile
に保存しておき、後から必要に応じてライブラリを復元することができます。 こうした一連のツールによってプロジェクトの分離、移植可能性、再現可能性を高めることができます。
renv
の基本的なワークフロー
このセクションの内容は次のとおりです。
renv
をインストールする- プレインストールされた R ライブラリで
renv
セッションを初期化する renv
を使用して新しいパッケージをインストールするrenv
を使用して R ノートブック環境を DBFS に保存する- DBFS の
lockfile
からrenv
環境を再インストールする
renv
をインストールする
renv
は、クラスタースコープのライブラリとして、またはノートブックスコープのライブラリとしてインストールできます。 ノートブックスコープのライブラリとして renv
をインストールするには、次のようにします。
require(devtools)
install_version(
package = "renv",
repos = "http://cran.us.r-project.org"
)
Databricks では、リポジトリに CRAN スナップショットを使用してパッケージ バージョンを修正することを推奨しています。
プレインストールされた R ライブラリで renv
セッションを初期化する
renv
を使用するときの最初の手順は、renv::init()
を使用してセッションを初期化することです。 libPaths
を設定して、既定のダウンロード場所をノートブックスコープの R ライブラリ パスに変更します。
renv::init(settings = list(external.libraries=.libPaths()))
.libPaths(c(.libPaths()[2], .libPaths())
renv
を使用して新しいパッケージをインストールする
これで、R パッケージのインストールと削除を renv
の API を使用して行えるようになりました。 たとえば、最新バージョンの digest
をインストールするには、ノートブックのセル内で次のコマンドを実行します。
renv::install("digest")
古いバージョンの digest
をインストールするには、ノートブックのセル内で次のコマンドを実行します。
renv::install("digest@0.6.18")
GitHub から digest
をインストールするには、ノートブックのセル内で次のコマンドを実行します。
renv::install("eddelbuettel/digest")
Bioconductor からパッケージをインストールするには、ノートブックのセル内で次のコマンドを実行します。
# (note: requires the BiocManager package)
renv::install("bioc::Biobase")
renv::install
API では renv キャッシュが使用されることに注意してください。
renv
を使用して R ノートブック環境を DBFS に保存する
環境を保存する前に次のコマンドを 1 回実行します。
renv::settings$snapshot.type("all")
こうすることで、現在ノートブックで使用されているパッケージだけでなく、libPaths
にインストールされたすべてのパッケージのスナップショットを作成するように renv
が設定されます。 詳細については、renv のドキュメントを参照してください。
これでノートブックのセル内で次のコマンドを実行すれば、現在の環境の状態を保存することができます。
renv::snapshot(lockfile="/dbfs/PATH/TO/WHERE/YOU/WANT/TO/SAVE/renv.lock", force=TRUE)
これで、libPaths
にインストールされたパッケージをすべてキャプチャすることによって lockfile
が更新されます。 また、lockfile
は、ローカル ファイル システムから DBFS に移動され、クラスターを終了したり再起動したりした場合でも失われることはありません。
DBFS の lockfile
から renv
環境を再インストールする
まず、新しいクラスターが、最初に renv
環境を作成したクラスタと同じバージョンの Databricks Runtime を実行していることを確認してください。 そうすることで確実に、プレインストールされた R パッケージが一致します。 その一覧は、各ランタイムのリリース ノートでご覧いただけます。 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
プロジェクト間でこのキャッシュが共有されます。 これによってインストール時間が短縮され、ディスク領域が節約されます。 devtools
API または install.packages()
から、pkgs
以外の引数を追加してダウンロードされたパッケージは、renv
キャッシュではキャッシュされません。