在 Microsoft Fabric 中管理 Apache Spark 库

库是预先编写的代码的集合,开发人员可以导入这些代码以提供额外的功能。 使用库时,无需从头开始编写代码即可完成常见的任务, 只需导入库并使用其函数和类来实现所需的功能,从而节省时间和精力。 Microsoft Fabric 提供了多种机制来帮助管理和使用库。

  • 内置库:每个 Fabric Spark 运行时都提供了一组丰富的常用预安装库。 可以在 Fabric Spark 运行时中找到完整的内置库列表。
  • 公共库:公用库源自当前受支持的 PyPI 和 Conda 等存储库。
  • 自定义库:自定义库是你或你的组织构建的代码。 Fabric 支持 .whl、.jar 和 .tar.gz 等格式。 对于 R 语言,Fabric 仅支持 .tar.gz。 对于 Python 自定义库,请使用 .whl 格式。

工作区设置中的库管理

重要

不再支持在工作区设置中进行库管理。 要将工作区库和 Spark 属性迁移到默认环境,请参阅迁移工作区库和 Spark 属性

库管理最佳做法摘要

以下场景说明了最佳做法。

场景 1:管理员为工作区设置默认库

要设置默认库,你必须是工作区的管理员。 管理员可以执行以下任务:

  1. 创建新环境
  2. 在环境中安装所需的依赖项
  3. 将环境附加为工作区默认值

工作区中的笔记本和 Spark 作业定义将附加到“工作区设置”。 这会使用在工作区的默认环境中安装的库启动会话。

场景 2:暂留一个或多个代码项的库规范

如果要暂留库规范,请在环境中安装库将其附加到代码项

此方法的一个好处是,可以节省运行始终需要通用库的代码所需的工作。 在环境中成功安装后,如果附加了环境,则这些库在所有 Spark 会话中都有效。

另一个好处是这种方法支持低于工作区级别的库配置粒度。 可以将一个环境附加到多个代码项目。 如果在一个需要相同库的工作区中有一部分笔记本或 Spark 作业定义,请将它们附加到同一环境。 工作区的管理员、成员或参与者可以创建、编辑和附加环境。

场景 3:交互式运行中的内联安装

如果需要在交互式笔记本中一次性使用未安装的库,则最方便的方法是内联安装。 借助 Fabric 中的内联命令,你可以使库在当前笔记本 Spark 会话中生效, 但不会在不同会话中暂留。

有权运行笔记本的用户可以在 Spark 会话中安装其他的库。

支持的库类型摘要

库类型 环境库管理 内联安装
Python Public(PyPI 和 Conda) 支持 支持
Python Custom (.whl) 支持 支持
R Public (CRAN) 不支持 支持
R 自定义 (.tar.gz) 支持 支持
Jar 支持作为自定义库 不支持

重要

对于 .jar 库当前存在一些限制。

  • 对于 Scala 用户,.jar 文件可以在环境中成功安装,但对 Spark/Scala 会话不起作用。 安装将覆写具有不同库的内置库。 新的 .jar 在会话中正常工作。
  • 对于 Python 用户,环境中当前不支持所有 .jar 文件。 这些文件可以在环境中成功安装,但在 PySpark 会话中无效。
  • 可以改为在笔记本会话级别安装 .jar 文件。

内联安装

内联命令支持 Python 库和 R 库。

Python 内联安装

重启 Python 解释器以应用对库的更改。 任何运行命令单元之前定义的变量将丢失。 强烈建议将所有用于添加、删除或更新 Python 包的命令放置在笔记本的开头。

默认情况下,用于管理 Python 库的内联命令在笔记本管道运行中被禁用。 如果要为管道启用 %pip install,请在笔记本活动参数中添加“_inlineInstallationEnabled”布尔参数,其等于 True。

屏幕截图显示为笔记本管道运行启用 pip install 的配置。

注意

%pip install 可能不时导致不一致的结果。 建议在环境中安装库,并在管道中使用它。 在笔记本引用运行中,用于管理 Python 库的内联命令不受支持。 为了确保正确执行,建议从引用的笔记本中删除这些内联命令。

我们建议使用 %pip,而不是 !pip!pip 是 IPython 内置 shell 命令,存在以下限制:

  • !pip 仅在驱动程序节点上安装包,而不是在执行程序节点上安装。
  • 通过 !pip 安装的包不会影响与内置包的冲突,也不影响是否已将包导入笔记本。

但是,%pip 会处理这些场景。 通过 %pip 安装的库在驱动程序和执行程序节点上都可用,即使已经导入,库仍将有效。

提示

%conda install 命令安装新 Python 库所需的时间通常比 %pip install 命令更长。 它会检查完整的依赖项并解决冲突。

使用 %conda install 可以 提高可靠性和稳定性。 如果确定要安装的库与运行时环境中预安装的库不冲突,则可以使用 %pip install

有关所有可用的 Python 内联命令及其说明,请参阅 %pip 命令%conda 命令

通过内联安装管理 Python 公共库

此示例将演示如何使用内联命令来管理库。 假设你想要使用 altair(一个强大的 Python 可视化库)进行一次性数据浏览。 假设工作区中未安装库。 以下示例使用 conda 命令来演示这些步骤。

可以使用内联命令在笔记本会话上启用 altair,而不会影响笔记本的其他会话或其他项目。

  1. 在笔记本代码单元中运行以下命令: 第一个命令会安装 altair 库。 此外还将安装 vega_datasets,其中包含可用于可视化的语义模型。

    %conda install altair          # install latest version through conda command
    %conda install vega_datasets   # install latest version through conda command
    

    该单元的输出指示安装结果。

  2. 通过在另一个笔记本单元中运行以下代码来导入包和语义模型:

    import altair as alt
    from vega_datasets import data
    
  3. 现在,可以使用会话范围的 altair 库:

    # load a simple dataset as a pandas DataFrame
    cars = data.cars()
    alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
    ).interactive()
    

通过内联安装管理 Python 自定义库

可以将 Python 自定义库上传到附加到笔记本的湖屋的 文件 文件夹。 转到湖屋,选择“文件”文件夹中的 图标,然后上传自定义库。

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

# install the .whl through pip command
%pip install /lakehouse/default/Files/wheel_file_name.whl             

R 内联安装

Fabric 支持使用 install.packages()remove.packages()devtools:: 命令来管理 R 库。 有关所有可用的 R 内联命令及其说明,请参阅 install.packages 命令remove.package 命令

通过内联安装管理 R 公共库

此示例将演示安装 R 公共库的步骤。

若要安装 R 源库:

  1. 在笔记本功能区中将工作语言切换到 SparkR (R)

  2. 在笔记本单元中运行以下命令以安装 caesar 库。

    install.packages("caesar")
    
  3. 现在,可以使用 Spark 作业与会话范围的 caesar 库进行交互。

    library(SparkR)
    sparkR.session()
    
    hello <- function(x) {
    library(caesar)
    caesar(x)
    }
    spark.lapply(c("hello world", "good morning", "good evening"), hello)
    

通过内联安装管理 Jar 库

通过以下命令在笔记本会话中为 .jar 文件提供支持。

%%configure -f
{
    "conf": {
        "spark.jars": "abfss://<<Lakehouse prefix>>.dfs.fabric.microsoft.com/<<path to JAR file>>/<<JAR file name>>.jar",
    }
}        

代码单元使用 Lakehouse 存储作为示例。 在笔记本资源管理器中,可以复制完整的文件 ABFS 路径并在代码中替换。 获取 ABFS 路径的屏幕截图。