R 库管理

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

Microsoft Fabric 支持具有许多常用开源 R 包(包括预安装的 TidyVerse)的 R 运行时。 启动 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 自定义库

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

  1. 打开想要在其中使用自定义库的笔记本。

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

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

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

    如何将文件上传到 Lakehouse 文件文件夹的屏幕截图。

  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()中,包参数设置为 FALSE。 此操作将当前 libPaths 中的库复制到工作器,允许你导入这些库并在工作器中使用它们。 例如,可以运行以下命令以生成具有 sparklyr::spark_apply()的 caesar 加密消息:

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 功能: