Verwenden von .NET für Apache Spark mit Azure Synapse Analytics

.NET für Apache Spark bietet kostenlose, Open-Source-basierte und plattformübergreifende .NET-Unterstützung für Spark.

Es stellt .NET-Bindungen für Spark bereit, mit denen Sie über C# und F# auf Spark-APIs zugreifen können. Mit .NET für Apache Spark haben Sie die Möglichkeit, in .NET geschriebene benutzerdefinierte Funktionen für Spark zu schreiben und auszuführen. Mit den .NET-APIs für Spark können Sie auf alle Aspekte von Spark-Datenrahmen zugreifen, die Ihnen helfen, Ihre Daten zu analysieren, einschließlich Spark SQL, Delta Lake und strukturiertem Streaming.

Sie können Daten mit .NET für Apache Spark mithilfe von Spark-Batchauftragsdefinitionen oder mit interaktiven Azure Synapse Analytics-Notebooks analysieren. In diesem Artikel erfahren Sie, wie Sie .NET für Apache Spark mit Azure Synapse mit beiden Methoden verwenden.

Wichtig

.NET für Apache Spark ist ein Open-Source-Projekt der .NET Foundation, das derzeit die .NET 3.1-Bibliothek erfordert, die den Status „Nicht mehr unterstützt“ erreicht hat. Wir möchten Benutzer von Azure Synapse Spark über die Entfernung der .NET für Apache Spark-Bibliothek in der Azure Synapse Runtime für Apache Spark Version-3.3 informieren. Weitere Informationen zu diesem Thema finden Benutzer in der .NET-Supportrichtlinie.

Daher ist es Benutzern nicht mehr möglich, Apache Spark-APIs über C# und F# zu verwenden oder C#-Code in Notebooks in Synapse oder über Apache Spark-Auftragsdefinitionen in Synapse auszuführen. Beachten Sie, dass sich diese Änderung nur auf Azure Synapse Runtime für Apache Spark 3.3 und höher auswirkt.

Die Unterstützung von .NET für Apache Spark wird in allen früheren Versionen der Azure Synapse Runtime entsprechend ihren Lebenszyklusphasen fortgesetzt. Es ist jedoch nicht geplant, .NET für Apache Spark in Azure Synapse Runtime für Apache Spark 3.3 und zukünftige Versionen zu unterstützen. Es wird empfohlen, dass Benutzer mit vorhandenen Workloads, die in C# oder F# geschrieben wurden, zu Python oder Scala migrieren. Den Benutzern wird empfohlen, diese Informationen zur Kenntnis zu nehmen und entsprechend zu planen.

Übermitteln von Batchaufträgen mithilfe der Spark-Auftragsdefinition

Besuchen Sie das Tutorial, um zu erfahren, wie Sie Azure Synapse Analytics zum Erstellen von Apache Spark-Auftragsdefinitionen für Synapse Spark-Pools verwenden. Wenn Sie Ihre App für die Übermittlung an Azure Synapse nicht gepackt haben, führen Sie die folgenden Schritte aus.

  1. Konfigurieren Sie Ihre dotnet-Anwendungsabhängigkeiten für Kompatibilität mit Synapse Spark. Die erforderliche .NET Spark-Version wird in der Synapse Studio-Oberfläche unter Ihrer Apache Spark-Poolkonfiguration in der Toolbox „Verwalten“ angezeigt.

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

    Erstellen Sie Ihr Projekt als .NET-Konsolenanwendung, die eine ausführbare Ubuntu x86-Datei ausgibt.

    <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. Führen Sie die folgenden Befehle aus, um Ihre App zu veröffentlichen. Stellen Sie sicher, dass Sie mySparkApp durch den Pfad zu Ihrer App ersetzen.

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. Zippen Sie den Inhalt des Veröffentlichungsordners, z. B. publish.zip, der als Ergebnis von Schritt 1 erstellt wurde. Alle Assemblys sollten sich im Stammverzeichnis der ZIP-Datei befinden, und es sollte keine Zwischenordnerebene vorhanden sein. Das bedeutet, dass beim Entpacken von publish.zip alle Assemblys in Ihr aktuelles Arbeitsverzeichnis extrahiert werden.

    Unter Windows:

    Erstellen Sie mit Windows PowerShell oder PowerShell 7 eine ZIP-Datei mit dem Inhalt Ihres Veröffentlichungsverzeichnisses.

    Compress-Archive publish/* publish.zip -Update
    

    Unter Linux:

    Öffnen Sie eine Bash-Shell, wechseln Sie mit „cd“ in das Verzeichnis „bin“, das alle veröffentlichten Binärdateien enthält, und führen Sie den folgenden Befehl aus.

    zip -r publish.zip
    

.NET für Apache Spark mit Azure Synapse Analytics-Notebooks

Notebooks sind eine hervorragende Möglichkeit, um Prototypen Ihrer .NET für Apache Spark-Pipelines und -Szenarios zu erstellen. Sie können schnell und effizient mit der Arbeit mit Ihren Daten beginnen sowie sie verstehen, filtern, anzeigen und visualisieren.

Data Engineers, Data Scientists, Wirtschaftsanalytiker und Machine Learning-Techniker können alle über ein gemeinsam genutztes, interaktives Dokument zusammenarbeiten. Sie sehen unmittelbare Ergebnisse der Datenuntersuchung und können Ihre Daten im selben Notebook visualisieren.

Verwenden von .NET für Apache Spark-Notebooks

Wenn Sie ein neues Notebook erstellen, wählen Sie einen Sprachkernel aus, mit dem Sie Ihre Geschäftslogik umsetzen möchten. Kernelunterstützung ist für mehrere Sprachen verfügbar, einschließlich C#.

Um .NET für Apache Spark in Ihrem Azure Synapse Analytics-Notebook zu verwenden, wählen Sie .NET Spark (C#) als Ihren Kernel aus, und fügen Sie das Notebook an einen vorhandenen serverlosen Apache Spark-Pool an.

Das .NET Spark-Notebook basiert auf den interaktiven .NET-Erfahrungen und bietet interaktive C#-Erfahrungen mit der Möglichkeit zur Verwendung des standardmäßigen .NET für Spark mit bereits vordefinierter Spark-Sitzungsvariable spark.

Installieren von NuGet-Paketen in Notebooks

Sie können NuGet-Pakete Ihrer Wahl in Ihrem Notebook installieren, indem Sie den Magic-Befehl #r nuget vor dem Namen des NuGet-Pakets verwenden. Das folgende Diagramm zeigt ein Beispiel:

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

Weitere Informationen zum Arbeiten mit NuGet-Paketen in Notebooks finden Sie in der .NET Interactive-Dokumentation.

.NET für Apache Spark-Funktionen des C#-Kernels

Die folgenden Funktionen sind verfügbar, wenn Sie .NET für Apache Spark im Azure Synapse Analytics-Notebook verwenden:

  • Deklaratives HTML: Generieren von Ausgaben aus Ihren Zellen mithilfe von HTML-Syntax wie Headern, Aufzählungen und sogar der Anzeige von Bildern.
  • Einfache C#-Anweisungen (z. B. Zuweisungen, Ausgaben in der Konsole, Auslösen von Ausnahmen usw.).
  • Mehrzeilige C#-Codeblöcke (z. B. if-Anweisungen, Foreach-Schleifen, Klassendefinitionen usw.).
  • Zugriff auf die C#-Standardbibliothek (z. B. System, LINQ, Enumerables usw.).
  • Unterstützung für C# 8.0-Sprachfunktionen.
  • spark als vordefinierte Variable, um Ihnen Zugriff auf Ihre Apache Spark-Sitzung zu gewähren.
  • Unterstützung für das Definieren von benutzerdefinierten .NET-Funktionen, die in Apache Spark ausgeführt werden können. Um weitere Informationen zur Verwendung von UDFs in interaktiven .NET für Apache Spark-Umgebungen zu erhalten, empfehlen wir Schreiben und Aufrufen von UDFs in interaktiven .NET für Apache Spark-Umgebungen.
  • Unterstützung für die Visualisierung der Ausgabe von Spark-Aufträgen mithilfe verschiedener Diagramme (z. B. Linie, Balken oder Histogramm) und Layouts (z. B. einzeln, überlagert usw.) mithilfe der XPlot.Plotly-Bibliothek.
  • Möglichkeit zum Einschließen von NuGet-Paketen in Ihr C#-Notebook.

Problembehandlung

DotNetRunner: null / Futures timeout beim Ausführen der Synapse Spark-Auftragsdefinition

Synapse Spark-Auftragsdefinitionen für Spark-Pools mit Verwendung von Spark 2.4 erfordern Microsoft.Spark1.0.0. Löschen Sie Ihre Verzeichnisse bin und obj, und veröffentlichen Sie das Projekt mit Version 1.0.0.

OutOfMemoryError: java heap space at org.apache.spark

.NET Spark 1.0.0 verwendet eine andere Debugarchitektur als Version 1.1.1+. Sie müssen Version 1.0.0 für Ihre veröffentlichte Version und Version 1.1.1+ für das lokale Debuggen verwenden.

Nächste Schritte