R 库管理

这些库提供了可重用的代码,你可能想要在 Microsoft Fabric Spark 的程序或项目中包含这些代码。

Microsoft Fabric 支持 R 运行时,其中包含许多常用的开源 R 包,包括预安装的 TidyVerse。 Spark 实例启动时,这些库会自动包含在内,并可在笔记本或 Spark 作业定义中立即使用。

你可能会出于各种原因需要更新 R 库。 例如,你的一个核心依赖项发布了新版本,或者你的团队生成了一个自定义包,你需要在 Spark 群集中提供该包。

根据你的情况,可能需要包含两种类型的库:

  • 源库:源库是指驻留在公共源或存储库中的源库,如 CRAN 或 GitHub。

  • 自定义库是你或你的组织生成的代码,可以通过库管理门户管理 .tar.gz

Microsoft Fabric 上安装了两个级别的包:

  • 环境:通过环境管理库,以在多个笔记本或作业中重复使用同一组库。

  • 会话:会话级安装会为特定的笔记本会话创建一个环境。 会话级别库的更改在会话之间不会保留。

汇总当前可用的 R 库管理行为:

库类型 环境安装 会话级安装
R 源 (CRAN) 不支持 支持
R 自定义 支持 支持

先决条件

会话级 R 库

在进行交互式数据分析或机器学习时,可能会尝试更新版本的包,或者可能需要当前在工作区中不可用的包。 你可使用会话范围的包来添加、管理和更新会话依赖项,而无需更新工作区设置。

  • 安装限制会话范围的库时,只有当前笔记本可以访问指定的库。
  • 这些库不会影响使用同一 Spark 池的其他会话或作业。
  • 这些库将安装在基本运行时和池级别库之上。
  • 笔记本库的优先级最高。
  • 会话范围的 R 库不会跨会话保留。 执行相关安装命令时,将在每个会话的开头安装这些库。
  • 限制会话范围的 R 库会自动安装在驱动程序和工作器节点中。

注意

运行管道作业时,将禁用这些用于管理 R 库的命令。 如果你要在管道中安装某个包,必须使用工作区级别的库管理功能。

从 CRAN 安装 R 包

可以从 CRAN 轻松安装 R 库。

# install a package from CRAN
install.packages(c("nycflights13", "Lahman"))

还可以使用 CRAN 快照作为存储库,以确保每次都下载相同的包版本。

# install a package from CRAN snapsho
install.packages("highcharter", repos = "https://cran.microsoft.com/snapshot/2021-07-16/")

使用 devtools 安装 R 包

devtools 库简化了包开发以加快常见任务。 此库安装在默认的 Microsoft Fabric 运行时中。

可以使用 devtools 指定要安装的特定库版本。 这些库安装在群集中的所有节点上。

# Install a specific version. 
install_version("caesar", version = "1.0.0")

同样,可以直接从 GitHub 安装库。

# Install a GitHub library. 

install_github("jtilly/matchingR")

目前,Microsoft Fabric 中支持以下 devtools 函数:

命令 说明
install_github() 从 GitHub 安装 R 包
install_gitlab() 从 GitLab 安装 R 包
install_bitbucket() 从 BitBucket 安装 R 包
install_url() 从任意 URL 安装 R 包
install_git() 从任意 git 存储库安装
install_local() 从磁盘上的本地文件安装
install_version() 从 CRAN 上的特定版本安装

安装 R 自定义库

若要使用会话级自定义库,必须先将其上传到附加的湖屋。

  1. 在左侧,选择“添加”以添加现有湖屋或创建湖屋。

    显示如何将湖屋添加到笔记本的屏幕截图。

  2. 若要将文件添加到此湖屋,请选择工作区,然后选择湖屋。

    显示如何导航到湖屋以添加文件的屏幕截图。

  3. 右键单击或选择文件旁边的“...”以上传 .tar.gz 文件。

    显示如何将文件上传到湖屋“文件”文件夹的屏幕截图。

  4. 上传后,返回到笔记本。 使用以下命令将自定义库安装到会话:

    install.packages("filepath/filename.tar.gz", repos = NULL, type = "source")
    

查看已安装的库

可以使用 library 命令查询会话中安装的所有库。

# query all the libraries installed in current session
library()

使用 packageVersion 函数检查库的版本:

# check the package version
packageVersion("caesar")

从会话中删除 R 包

可以使用 detach 函数从命名空间中删除库。 这些库会保留在磁盘上,直到再次加载它们。

# detach a library

detach("package: caesar")

若要从笔记本中删除会话范围的包,请使用 remove.packages() 命令。 此库更改不会影响同一群集上的其他会话。 用户无法卸载或删除默认 Microsoft Fabric 运行时的内置库。

注意

无法删除 SparkR、SparklyR 或 R 等核心包。

remove.packages("caesar")

会话范围的 R 库和 SparkR

在 SparkR 工作器上可以使用笔记本范围的库。

install.packages("stringr")
library(SparkR)

str_length_function <- function(x) {
  library(stringr)
  str_length(x)
}

docs <- c("Wow, I really like the new light sabers!",
               "That book was excellent.",
               "R is a fantastic language.",
               "The service in this restaurant was miserable.",
               "This is neither positive or negative.")

spark.lapply(docs, str_length_function)

会话范围的 R 库和 sparklyr

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

install.packages("caesar", repos = "https://cran.microsoft.com/snapshot/2021-07-16/")

spark_version <- sparkR.version()
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", config = config)

apply_cases <- function(x) {
  library(caesar)
  caesar("hello world")
}
sdf_len(sc, 5) %>%
  spark_apply(apply_cases, packages=FALSE)

详细了解 R 功能: