管理会话范围内的包

除了池级别的包以外,还可以在笔记本会话开始时指定会话范围的库。 使用限制会话范围的库时,可以在笔记本会话中指定和使用 Python、jar 和 R 包。

使用限制会话范围的库时,请务必牢记以下几点:

  • 安装限制会话范围的库时,只有当前笔记本可以访问指定的库。
  • 这些库不会影响使用同一 Spark 池的其他会话或作业。
  • 这些库安装在基本运行时和池级别库之上,并具有最高优先级。
  • 限制会话范围的库不会跨会话保留。

会话范围内的 Python 包

通过 environment.yml 文件管理限制会话范围的 Python 包

指定会话范围内的 Python 包:

  1. 导航到所选的 Spark 池,确保已启用会话级别的库。 通过导航到“管理”>“Apache Spark 池”>“包”选项卡可以启用此设置。Screenshot of enabling session packages.
  2. 应用了设置后,可以打开笔记本,然后选择“配置会话”>“”。 Screenshot of specifying session packages.Screenshot of uploading Yml file.
  3. 在这里,可以上传 Conda environment.yml 文件,以在会话中安装或升级包。会话启动后,指定的库就会存在。 会话结束后,这些库将不再可用。

通过 %pip%conda 命令管理限制会话范围的 Python 包

可以使用常用的 %pip%conda 命令在 Apache Spark 笔记本会话期间安装其他第三方库或自定义库。 在本部分中,我们使用 %pip 命令来演示几种常见方案。

注意

  • 如果要安装新库,建议将 %pip%conda 命令放在笔记本的第一个单元格。 在管理会话级库以使更改生效后,Python 解释器将重启。
  • 运行管道作业时,将禁用这些用于管理 Python 库的命令。 如果你要在管道中安装某个包,必须利用池级别的库管理功能。
  • 限制会话范围的 Python 库会自动安装在驱动程序和工作器节点中。
  • 不支持以下 %conda 命令:createcleancompareactivatedeactivaterunpackage
  • 有关命令的完整列表,可以参考 %pip 命令%conda 命令

安装第三方包

可以轻松地从 PyPI 安装 Python 库。

# Install vega_datasets
%pip install altair vega_datasets

若要验证安装结果,可以运行以下代码来可视化 vega_datasets

# Create a scatter plot
# Plot Miles per gallon against the horsepower across different region

import altair as alt
from vega_datasets import data

cars = data.cars()
alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
).interactive()

从存储帐户安装 wheel 包

若要从存储安装库,需要通过运行以下命令装载到存储帐户。

from notebookutils import mssparkutils  
 
mssparkutils.fs.mount(  
    "abfss://<<file system>>@<<storage account>.dfs.core.chinacloudapi.cn",  
    "/<<path to wheel file>>",  
    {"linkedService":"<<storage name>>"}  
) 

然后,可以使用 %pip install 命令安装所需的 wheel 包

%pip install /<<path to wheel file>>/<<wheel package name>>.whl

安装另一个版本的内置库

可以使用以下命令查看特定包的内置版本。 我们使用 pandas 作为示例

%pip show pandas

结果如以下日志所示:

Name: pandas
Version: **1.2.3**
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: https://pandas.pydata.org
... ...

可以使用以下命令将 pandas 切换到另一个版本,例如 1.2.4

%pip install pandas==1.2.4

卸载限制会话范围的库

如果要卸载此笔记本会话中安装的包,可以参考以下命令。 但是,无法卸载内置包。

%pip uninstall altair vega_datasets --yes

使用 %pip 命令从 requirement.txt 文件安装库

%pip install -r  /<<path to requirement file>>/requirements.txt

会话范围内的 Java 或 Scala 包

若要指定限制会话范围的 Java 或 Scala 包,可使用 %%configure 选项:

%%configure -f
{
    "conf": {
        "spark.jars": "abfss://<<file system>>@<<storage account>.dfs.core.chinacloudapi.cn/<<path to JAR file>>",
    }
}

注意

  • 建议你在笔记本开头运行 %%configure。 若要查看有效参数的完整列表,请参阅此文档

会话范围的 R 包(预览版)

Azure Synapse Analytics 池包含许多现成的流行 R 库。 你还可以在 Apache Spark 笔记本会话期间安装额外的第三方库。

注意

  • 运行管道作业时,将禁用这些用于管理 R 库的命令。 如果你要在管道中安装某个包,必须利用池级别的库管理功能。
  • 限制会话范围的 R 库会自动安装在驱动程序和工作器节点中。

安装包

可以从 CRAN 轻松安装 R 库。

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

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

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

使用 devtools 安装包

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

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

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

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

# Install a GitHub library. 

install_github("jtilly/matchingR") 

目前,Azure Synapse Analytics 中支持以下 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 上的特定版本安装

查看已安装的库

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

library()

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

packageVersion("caesar")

从会话中删除 R 包

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

# detach a library

detach("package: caesar")

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

remove.packages("caesar")

注意

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

会话范围的 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 <- "3.2"
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)

后续步骤