笔记本范围的 R 库

通过使用笔记本范围内的 R 库,可以创建和修改特定于笔记本会话的自定义 R 环境。 安装笔记本范围内的 R 库时,只有当前笔记本以及与该笔记本关联的任何作业有权访问该库。 附加到同一群集的其他笔记本不受影响。

笔记本范围内的库不会跨会话保留。 必须在每个会话开始时或从群集中分离笔记本时,重新安装笔记本范围内的库。

笔记本范围内的库在工作器上自动提供给 SparkR UDF 使用。

若要为附加到群集的所有笔记本安装库,请使用已安装群集的库。 请参阅群集库

在 R 中安装笔记本范围内的库

可以使用任何熟悉的方法在 R 中安装包,例如 install.packages()devtools APIBioconductor

工作器节点和驱动程序节点可以访问 R 包。

在 R 中管理笔记本范围内的库

本节内容:

安装包

require(devtools)

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

Databricks 建议将 CRAN 快照用作存储库来保证可重现结果

devtools::install_github("klutometis/roxygen")

从笔记本环境中删除 R 包

若要从笔记本中删除笔记本范围内的库,请使用 remove.packages() 命令。

remove.packages("caesar")

笔记本范围内的 R 库与 Spark UDF

本节内容:

笔记本范围内的 R 库和 SparkR

SparkR 工作器上提供了笔记本范围的库;要使用某个库,只需将其导入。 例如,你可以运行以下命令以使用 SparkR UDF 生成凯撒加密消息:

require(devtools)

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

library(SparkR)
sparkR.session()

hello <- function(x) {
  library(caesar)
  caesar("hello world")
}

spark.lapply(c(1, 2), hello)

笔记本范围内的 R 库和 sparklyr

默认情况下,在 sparklyr::spark_apply() 中,packages 参数设置为 TRUE。 此操作将当前 libPaths 中的库复制到工作器,允许你导入这些库并在工作器中使用这些库。 例如,你可以运行以下命令来使用 sparklyr::spark_apply() 生成凯撒加密的消息:

require(devtools)

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

library(sparklyr)
sc <- spark_connect(method = 'databricks')

apply_caes <- function(x) {
  library(caesar)
  caesar("hello world")
}

sdf_len(sc, 5) %>%
  spark_apply(apply_caes)

如果不希望库在工作器上可用,请将 packages 设置为 FALSE

库隔离和托管 RStudio

RStudio 为每个用户创建单独的库路径;因此,用户是彼此隔离的。 但是,库路径在工作器上不可用。 如果要在从 RStudio 启动的作业中使用 SparkR 工作器内的包,需要使用群集范围内的库进行安装。

或者,如果使用 sparklyr UDF,那么在使用 spark_apply(..., packages = TRUE) 时,工作器可以使用安装在 RStudio 中的包。

常见问题 (FAQ)

如何只在驱动程序上为所有 R 笔记本安装一个包?

将安装目录显式设置为 /databricks/spark/R/lib。 例如,使用 install.packages() 运行 install.packages("pckg", lib="/databricks/spark/R/lib")。 安装在 /databricks/spark/R/lib 中的包在群集上的所有笔记本之间共享,但 SparkR 工作器无法访问这些包。 如果要在笔记本以及工作器之间共享库,请使用群集库

是否会缓存笔记本范围内的库?

群集上没有为笔记本范围内的库实现的缓存。 如果你在笔记本中安装包,而另一个用户在同一群集上的另一个笔记本中安装相同的包,则将再次下载、编译和安装该包。