Azure Synapse Analytics で .NET for Apache Spark を使用する

.NET for Apache Spark では、無料でオープンソースかつクロスプラットフォームの、Spark 向け .NET サポートを提供しています。

これには、C# および F# を介して Spark API にアクセスできるようにする Spark 用 .NET バインディングが用意されています。 .NET for Apache Spark では、.NET で記述された Spark 用のユーザー定義関数を作成して実行することもできます。 Spark 用の .NET API を使用すると、Spark SQL、Delta Lake、構造化ストリーミングなど、ご利用のデータの分析に役立つ Spark DataFrames のあらゆる側面にアクセスすることができます。

.NET for Apache Spark を、Spark バッチ ジョブ定義を介して使用するか、またはインタラクティブな Azure Synapse Analytics ノートブックで使用することで、データを分析することができます。 この記事では、両方の手法を使用して、Azure Synapse で .NET for Apache Spark を使用する方法について説明します。

重要

.NET for Apache Spark は、サポート対象外の状態に達している .NET 3.1 ライブラリを現在必要とする .NET Foundation のオープンソース プロジェクトです。 Azure Synapse Runtime for Apache Spark バージョン 3.3 で .NET for Apache Spark ライブラリが削除されることを Azure Synapse Spark のユーザーにお知らせします。 この問題の詳細については .NET サポート ポリシーを参照することができます。

その結果、ユーザーは C# および F# を介して Apache Spark API を利用したり、Synapse 内のノートブックや Synapse の Apache Spark ジョブ定義を使用して C# コードを実行したりすることができなくなります。 この変更は、 Azure Synapse Runtime for Apache Spark 3.3 以降にのみ影響することに注意してください。

.NET for Apache Spark は、Azure Synapse Runtime のすべてのバージョンで、それらのライフサイクル ステージに従って引き続きサポートされます。 ただし、Azure Synapse Runtime for Apache Spark 3.3 以降のバージョンでは、.NET for Apache Spark をサポートする予定はありません。 C# または F# で記述された既存のワークロードを持つユーザーは、Python または Scala に移行することをお勧めします。 ユーザーはこの情報をメモし、適切に計画することをお勧めします。

Spark ジョブ定義を使用してバッチ ジョブを送信する

Azure Synapse Analytics を使用して Synapse Spark プールの Apache Spark ジョブ定義を作成する方法を学習するチュートリアルにアクセスしてください。 Azure Synapse に送信するアプリをパッケージ化していない場合は、次の手順のようにします。

  1. Synapse Spark との互換性のために、dotnet アプリケーションの依存関係を構成します。 必要な .NET Spark バージョンは、Synapse Studio インターフェイスの Apache Spark プールの構成で [管理] ツールボックスの下に表示されます。

    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. たとえば、ステップ 1 の結果として作成された publish フォルダー publish.zip の内容を圧縮します。 すべてのアセンブリは ZIP ファイルのルートにある必要があり、中間フォルダーのレイヤーに存在してはいけません。 つまり、publish.zip を解凍すると、すべてのアセンブリが現在の作業ディレクトリに抽出されます。

    Windows の場合:

    Windows PowerShell または PowerShell 7 を使用して、publish ディレクトリの内容から .zip を作成します。

    Compress-Archive publish/* publish.zip -Update
    

    Linux の場合:

    Bash シェルを開き、発行されたすべてのバイナリを含む 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 インタラクティブ エクスペリエンスに基づいており、Spark セッション変数 spark があらかじめ定義された状態ですぐに利用できる .NET for Spark を使用する機能を備えたインタラクティブ C# エクスペリエンスを提供します。

ノートブックに NuGet パッケージをインストールする

NuGet パッケージの名前の前に #r nuget マジック コマンドを使用することで、任意の NuGet パッケージをノートブックにインストールできます。 次の図は例を示しています。

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

ノートブックで NuGet パッケージを使用する方法の詳細については、.NET のインタラクティブ ドキュメントを参照してください。

.NET for Apache Spark C# カーネル機能

Azure Synapse Analytics ノートブック内で .NET for Apache Spark を使用する場合は、次の機能を使用できます。

  • 宣言型 HTML: ヘッダー、箇条書きリスト、画像表示など、HTML 構文を使用してセルから出力を生成します。
  • シンプルな C# ステートメント (割り当て、コンソールへの出力、例外のスローなど)。
  • 複数行の C# コード ブロック (if ステートメント、foreach ループ、クラス定義など)。
  • 標準 C# ライブラリ (システム、LINQ、列挙体など) へのアクセス。
  • C# 8.0 言語機能のサポート。
  • spark は、事前定義された変数であり、これにより、使用する Apache Spark セッションへのアクセス権が与えられます。
  • Apache Spark 内で実行できる .NET ユーザー定義関数を定義するためのサポート。 .NET for Apache Spark Interactive エクスペリエンスで UDF を使用する方法を確認する場合は、.NET for Apache Spark Interactive 環境に UDF を書き込んで呼び出すことをお勧めします。
  • Spark ジョブからの出力を、XPlot.Plotly ライブラリを使用してさまざまなグラフ (折れ線、横棒、ヒストグラムなど) やレイアウト (シングル、オーバーレイなど) で視覚化するためのサポート。
  • ご利用の C# ノートブックに NuGet パッケージを含める機能。

トラブルシューティング

Synapse Spark ジョブ定義の実行における DotNetRunner: null / Futures timeout

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+ を使用する必要があります。

次のステップ