你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 .NET for Apache Spark 与 Azure Synapse Analytics 配合使用

.NET for Apache Spark 免费、 开源和跨平台 .NET 支持 Spark。

它为 Spark 提供 .NET 绑定,允许你通过 C# 和 F# 访问 Spark API。 使用 .NET for Apache Spark,还可以为以 .NET 编写的 Spark 编写和执行用户定义的函数。 使用适用于 Spark 的 .NET API 可以访问 Spark 数据帧的所有方面,这些方面可帮助你分析数据,包括 Spark SQL、Delta Lake 和结构化流式处理。

可以通过 Spark 批处理作业定义或使用交互式 Azure Synapse Analytics 笔记本通过 .NET for Apache Spark 分析数据。 本文介绍如何使用这两种方法将 .NET for Apache Spark 与 Azure Synapse 配合使用。

重要

.NET for Apache Spark 是 .NET Foundation 下的开源项目,当前需要 .NET 3.1 库,该库已达到支持不足状态。 我们希望通知 Azure Synapse Spark 的用户删除 Azure Synapse Runtime for Apache Spark 版本 3.3 中的 .NET for Apache Spark 库。 用户可能会参考 .NET 支持策略 获取有关此事的更多详细信息。

因此,用户将无法再通过 C# 和 F# 利用 Apache Spark API,也无法在 Synapse 的笔记本中或通过 Synapse 中的 Apache Spark 作业定义执行 C# 代码。 请务必注意,此更改仅影响适用于 Apache Spark 3.3 及更高版本的 Azure Synapse Runtime。

我们将继续根据 Azure Synapse Runtime 的 生命周期阶段在所有以前版本的 Azure Synapse Runtime 中支持 .NET for Apache Spark。 但是,我们没有计划支持适用于 Apache Spark 3.3 的 Azure Synapse Runtime 和将来版本的 .NET for Apache Spark。 建议使用 C# 或 F# 编写的现有工作负荷的用户迁移到 Python 或 Scala。 建议用户记下此信息并相应地进行计划。

使用 Spark 作业定义提交批处理作业

请访问本教程,了解如何使用 Azure Synapse Analytics 为 Synapse Spark 池创建 Apache Spark 作业定义。 如果尚未打包应用以提交到 Azure Synapse,请完成以下步骤。

  1. 配置应用程序 dotnet 依赖项,以便与 Synapse Spark 兼容。 所需的 .NET Spark 版本将记录在 Apache Spark 池配置下的 Synapse Studio 接口中,位于“管理”工具箱下。

    显示属性(包括 .NET Spark 版本)的屏幕截图。

    将项目创建为输出 Ubuntu x86 可执行文件的 .NET 控制台应用程序。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.Spark" Version="2.1.0" />
      </ItemGroup>
    
    </Project>
    
  2. 运行以下命令以发布应用。 请务必将 mySparkApp 替换为应用的路径。

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. 例如,压缩步骤 1 中创建的发布文件夹 publish.zip 的内容。 所有程序集都应位于 ZIP 文件的根目录中,并且不应有中间文件夹层。 这意味着解压缩 publish.zip 时,所有程序集都会解压缩到当前工作目录中。

    在 Windows 上:

    使用 Windows PowerShell 或 PowerShell 7,从发布目录的内容创建 .zip。

    Compress-Archive publish/* publish.zip -Update
    

    在 Linux 上:

    首先,打开一个 bash shell,然后使用 cd 命令进入包含所有发布的二进制文件的 bin 目录,并运行以下命令。

    zip -r publish.zip
    

Azure Synapse Analytics 笔记本中的 .NET for Apache Spark

笔记本是用于为 .NET for Apache Spark 管道和方案制作原型的绝佳选项。 可以开始快速高效地处理、理解、筛选、显示和可视化数据。

数据工程师、数据科学家、业务分析师和机器学习工程师都可以通过共享的交互式文档进行协作。 你会看到数据浏览的即时结果,并且可以在同一笔记本中可视化数据。

如何使用 .NET for Apache Spark 笔记本

创建新笔记本时,请选择想要表达业务逻辑的语言内核。 内核支持适用于多种语言,包括 C# 。

若要在 Azure Synapse Analytics 笔记本中使用 .NET for Apache Spark,请选择 .NET Spark (C#) 作为内核,并将笔记本附加到现有的无服务器 Apache Spark 池。

.NET Spark 笔记本基于 .NET 交互式 体验,提供交互式 C# 体验,能够将 .NET for Spark 与已预定义的 Spark 会话变量 spark 一起使用。

在笔记本中安装 NuGet 包

可以在 NuGet 包名称之前使用 #r nuget magic 命令将所选的 NuGet 包安装到笔记本中。 下图显示了一个示例:

显示使用 #r 安装 Spark .NET 笔记本 NuGet 包的屏幕截图

若要详细了解如何在笔记本中使用 NuGet 包,请参阅 .NET 交互式文档

.NET for Apache Spark C# 内核功能

在 Azure Synapse Analytics 笔记本中使用 .NET for Apache Spark 时,可以使用以下功能:

  • 声明性 HTML:使用 HTML 语法从单元格生成输出,例如标头、项目符号列表,甚至显示图像。
  • 简单的 C# 语句(例如赋值、打印到控制台、引发异常等)。
  • 多行 C# 代码块(例如 if 语句、foreach 循环、类定义等)。
  • 访问标准 C# 库(如 System、LINQ、Enumerables 等)。
  • 支持 C# 8.0 语言功能。
  • spark 作为预定义变量,可用于访问 Apache Spark 会话。
  • 支持定义 可在 Apache Spark 中运行的 .NET 用户定义函数。 建议 在 .NET for Apache Spark Interactive 环境中编写和调用 UDF ,了解如何在 .NET 中使用 UDF 进行 Apache Spark 交互式体验。
  • 支持通过 XPlot.Plotly 库使用不同的图表(例如折线图、条形图或直方图)和布局(例如单一布局、重叠布局,等等)来可视化 Spark 作业的输出。
  • 能够将 NuGet 包包含在 C# 笔记本中。

故障排除

org.apache.spark 上的 OutOfMemoryError: java 堆空间

Dotnet Spark 1.0.0 使用与 1.1.1+ 不同的调试体系结构。 必须对已发布的版本使用 1.0.0,并使用 1.1.1+ 进行本地调试。

后续步骤