在 Azure Synapse Analytics 中搭配 Azure Synapse 使用 .NET for Apache Spark

.NET for Apache Spark 提供免費、 開源且跨平台的 .NET 支援。

它提供 Spark 的 .NET 綁定,讓你可以透過 C# 和 F# 存取 Spark API。 使用 .NET for Apache Spark,你也可以撰寫並執行用 .NET 撰寫的 Spark 使用者定義函式。 Spark 的 .NET API 讓您能存取 Spark DataFrames 的所有面向,協助分析資料,包括 Spark SQL、Delta Lake 及結構化串流。

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

這很重要

.NET for Apache Spark 是 .NET 基金會下的一個開源專案,目前需要 .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 的筆記本中執行 C# 程式碼,或透過 Synapse 中的 Apache Spark Job 定義執行。 值得注意的是,此變更僅影響 Apache Spark 3.3 及以上版本的 Azure Synapse 執行環境。

根據其生命週期階段,我們會持續在所有先前版本的 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 版本會在 Synapse Studio 介面的 Apache Spark 池設定下,管理工具箱中標示。

    顯示屬性的螢幕擷取畫面,其中包含 .NET Spark 版本。

    把你的專案建立成一個 .NET 控制台應用程式,輸出 Ubuntu x86 可執行檔。

    <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

筆記本是為 Apache Spark 管線和情境原型設計 .NET 的絕佳選擇。 你可以快速且有效地開始處理、理解、篩選、展示和視覺化你的資料。

資料工程師、資料科學家、商業分析師和機器學習工程師都能透過共享的互動文件進行協作。 你能立即看到資料探索的成果,並能在同一本筆記本中視覺化你的資料。

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

當你建立新的筆記本時,你會選擇一個語言核心來表達你的商業邏輯。 核心支援多種語言,包括 C#。

要在你的 Azure Synapse Analytics 筆記本中使用 .NET for Apache Spark,請選擇 .NET Spark (C#) 作為核心,並將筆記本連接到現有的無伺服器 Apache Spark 池。

.NET Spark 筆記本基於 .NET 互動 體驗,提供互動式 C# 體驗,且能在預設 Spark 會話變數 spark 下即使用 .NET for Spark。

在筆記型電腦中安裝 NuGet 套件

你可以在筆記本上安裝你選擇的 NuGet 套件,只需在 NuGet 套件名稱前使用 #r nuget magic 指令。 以下圖示展示了一個範例:

截圖顯示使用 #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 中為 Apache Spark 互動環境撰寫和呼叫 UDF,以便於學習如何在 .NET 中使用 UDF 來體驗 Apache Spark 的互動環境。
  • 支援使用不同圖表(如線圖、長條圖或直方圖)及版面配置(如單圖、疊加圖等),透過 XPlot.Plotly 圖書館來視覺化 Spark 作業的輸出。
  • 能夠將 NuGet 套件整合到你的 C# 筆記本中。

Troubleshooting

OutOfMemoryError:java heap space,位於 org.apache.spark

Dotnet Spark 1.0.0 採用與 1.1.1+ 不同的除錯架構。 你必須使用 1.0.0 作為已發佈版本,1.1.1+ 用於本地除錯。

下一步