搭配 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,請完成下列步驟。
設定應用程式
dotnet
相依性以與 Synapse Spark 相容。 必要的 .NET Spark 版本將會在 Apache Spark 集區組態下的 Synapse Studio 介面中,于 [管理] 工具箱底下指出。將專案建立為輸出 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>
執行下列命令來發佈您的應用程式。 請務必將 mySparkApp 取代 為您的應用程式路徑。
cd mySparkApp dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
例如,
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 套件安裝到筆記本中。 下圖顯示範例:
若要深入瞭解如何在筆記本中使用 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。 清除和 bin
obj
目錄,並使用 1.0.0 發佈專案。
OutOfMemoryError:org.apache.spark 的 java 堆積空間
Dotnet Spark 1.0.0 使用與 1.1.1+ 不同的偵錯架構。 您必須針對已發佈的版本使用 1.0.0,並使用 1.1.1+ 進行本機偵錯。