搭配 Azure Synapse Analytics 使用適用于 Apache Spark 的 .NET

適用于 Apache Spark 的 .NET 提供 Spark 的免費 開放原始 碼和跨平臺 .NET 支援。

它提供適用于 Spark 的 .NET 系結,可讓您透過 C# 和 F# 存取 Spark API。 使用適用于 Apache Spark 的 .NET,您也可以針對以 .NET 撰寫的 Spark 撰寫和執行使用者定義的函式。 適用于 Spark 的 .NET API 可讓您存取 Spark DataFrame 的所有層面,以協助您分析資料,包括 Spark SQL、Delta Lake 和結構化串流。

您可以透過 Spark 批次作業定義或使用互動式 Azure Synapse Analytics 筆記本,使用適用于 Apache Spark 的 .NET 分析資料。 在本文中,您將瞭解如何使用這兩種技術搭配 Azure Synapse 使用適用于 Apache Spark 的 .NET。

重要

. NET for Apache Spark 是 .NET Foundation 下的開放原始碼專案,目前需要 .NET 3.1 程式庫,且已達到支援不足的狀態。 我們想要通知 Azure Synapse Spark 的使用者移除適用于 Apache Spark 的 Azure Synapse Runtime 3.3 版中的 .NET for Apache Spark 程式庫。 使用者可能會參考 .NET 支援原則 ,以取得有關此事的詳細資料。

因此,使用者將無法再透過 C# 和 F# 利用 Apache Spark API,或透過 Synapse 中的 Notebook 或 Synapse 中的 Apache Spark 作業定義來執行 C# 程式碼。 請務必注意,這項變更只會影響 Apache Spark 3.3 和更新版本適用的 Azure Synapse Runtime。

我們會根據舊版 Azure Synapse Runtime 的生命週期階段 ,繼續支援適用于 Apache Spark 的 .NET。 不過,我們還沒有在適用于 Apache Spark 3.3 和未來版本的 Azure Synapse Runtime 中支援適用于 Apache Spark 的 .NET。 我們建議使用 C# 或 F# 撰寫的現有工作負載的使用者移轉至 Python 或 Scala。 建議使用者記下這項資訊並據以規劃。

使用 Spark 作業定義提交批次作業

請流覽本教學課程,瞭解如何使用 Azure Synapse Analytics 建立 Synapse Spark 集 區的 Apache Spark 作業定義。 如果您尚未封裝應用程式以提交至 Azure Synapse,請完成下列步驟。

  1. 設定應用程式 dotnet 相依性以與 Synapse Spark 相容。 必要的 .NET Spark 版本將會在 Apache Spark 集區組態下的 Synapse Studio 介面中,于 [管理] 工具箱底下指出。

    Screenshot that shows properties, including the .NET Spark version.

    將專案建立為輸出 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. 例如, publish.zip 壓縮步驟 1 所建立之 publish 資料夾的內容。 所有元件都應該位於 ZIP 檔案的根目錄中,而且不應該有中繼資料夾層。 這表示當您解壓縮 publish.zip 時,所有元件都會擷取到您目前的工作目錄中。

    在 Windows 上

    使用 Windows PowerShell 或 PowerShell 7,從發佈目錄的內容建立 .zip。

    Compress-Archive publish/* publish.zip -Update
    

    在 Linux 上:

    使用所有已發佈的二進位檔,開啟 bash 殼層並將 cd 開啟至 bin 目錄,然後執行下列命令。

    zip -r publish.zip
    

適用于 Azure Synapse Analytics 筆記本中 Apache Spark 的 .NET

筆記本是針對 Apache Spark 管線和案例建立 .NET 原型的絕佳選項。 您可以開始快速且有效率地處理、瞭解、篩選、顯示及視覺化您的資料。

資料工程師、資料科學家、商務分析師和機器學習工程師都能夠透過共用的互動式檔共同作業。 您會看到資料探索的立即結果,而且可以在相同的筆記本中將您的資料視覺化。

如何使用 .NET for Apache Spark 筆記本

當您建立新的筆記本時,您可以選擇想要表達商務邏輯的語言核心。 核心支援適用于數種語言,包括 C# 。

若要在 Azure Synapse Analytics 筆記本中使用適用于 Apache Spark 的 .NET,請選取 .NET Spark (C#) 作為核心,並將筆記本連結至現有的無伺服器 Apache Spark 集區。

.NET Spark 筆記本是以 .NET 互動式 體驗為基礎 ,並提供互動式 C# 體驗,能夠透過已預先定義的 Spark 會話變數 spark ,使用現裝的 .NET for Spark。

在筆記本中安裝 NuGet 套件

您可以在 NuGet 套件的名稱之前,使用 #r nuget magic 命令,將您選擇的 NuGet 套件安裝到筆記本中。 下圖顯示範例:

Screenshot that shows using #r to install a Spark .NET notebook NuGet package

若要深入瞭解如何在筆記本中使用 NuGet 套件,請參閱 .NET 互動式檔

適用於 Apache Spark 的 .NET 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 中針對 Apache Spark 互動式環境 撰寫和呼叫 UDF,以瞭解如何在 .NET 中使用 UDF 進行 Apache Spark 互動式體驗。
  • 支援使用程式庫以不同的圖表(例如折線圖、橫條圖或長條圖)和版面配置來視覺化 Spark 作業的 XPlot.Plotly 輸出(例如單一、覆寫等)。
  • 能夠將 NuGet 套件包含在 C# 筆記本中。

疑難排解

DotNetRunner: null / Futures timeout 在 Synapse Spark 作業定義中執行

使用 Spark 2.4 的 Spark 集區上的 Synapse Spark 作業定義需要 Microsoft.Spark 1.0.0。 清除和 binobj 目錄,並使用 1.0.0 發佈專案。

OutOfMemoryError:org.apache.spark 的 java 堆積空間

Dotnet Spark 1.0.0 使用與 1.1.1+ 不同的偵錯架構。 您必須針對已發佈的版本使用 1.0.0,並使用 1.1.1+ 進行本機偵錯。

下一步