Condividi tramite


Usare .NET per Apache Spark con Azure Synapse Analytics

.NET per Apache Spark offre supporto .NET gratuito, open source e multipiattaforma per Spark.

Offre associazioni .NET per Spark che consentono di accedere alle API Spark tramite C# e F#. Con .NET per Apache Spark è anche possibile scrivere ed eseguire funzioni definite dall'utente per Spark scritte in .NET. Con le API .NET per Spark è possibile accedere a tutti gli aspetti dei dataframe Spark che consentono di analizzare i dati, tra cui Spark SQL, Delta Lake e Structured Streaming.

Per analizzare i dati con .NET per Apache Spark, è possibile usare definizioni di processo batch Spark o notebook interattivi di Azure Synapse Analytics. Questo articolo illustra come usare .NET per Apache Spark con Azure Synapse in entrambi i modi.

Importante

.NET per Apache Spark è un progetto open source in .NET Foundation che attualmente richiede la libreria .NET 3.1, la quale non è più supportata. Si desidera informare gli utenti di Azure Synapse Spark della rimozione della libreria .NET per Apache Spark nel runtime di Azure Synapse per Apache Spark versione 3.3. Gli utenti possono fare riferimento ai criteri di supporto di .NET per altri dettagli su questa questione.

Di conseguenza, non sarà più possibile per gli utenti usare le API Apache Spark tramite C# e F#, oppure eseguire codice C# nei notebook all'interno di Synapse o tramite le definizioni dei processi Apache Spark in Synapse. È importante notare che questa modifica influisce solo sul runtime di Azure Synapse per Apache Spark 3.3 e versioni successive.

Microsoft continuerà a supportare .NET per Apache Spark in tutte le versioni precedenti del runtime di Azure Synapse in base alle fasi del ciclo di vita. Tuttavia, non sono previsti piani per supportare .NET per Apache Spark nel runtime di Azure Synapse per Apache Spark 3.3 e versioni future. Si consiglia agli utenti con carichi di lavoro esistenti scritti in C# o F# di eseguire la migrazione a Python o Scala. Gli utenti sono invitati a prendere nota di queste informazioni e pianificare di conseguenza.

Inviare processi batch con la definizione di processo Spark

Vedere l'esercitazione per informazioni su come usare Azure Synapse Analytics per creare definizioni di processi Apache Spark per i pool di Synapse Spark. Se non è stato creato il pacchetto dell'app da inviare ad Azure Synapse, seguire questa procedura.

  1. Configurare le dipendenze dell'applicazione dotnet per la compatibilità con Synapse Spark. La versione di .NET Spark necessaria verrà annotata nell'interfaccia di Synapse Studio nella configurazione del pool di Apache Spark, all’interno della casella degli strumenti Gestisci.

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

    Creare il progetto come applicazione console .NET che restituisce un eseguibile 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. Eseguire i comandi seguenti per pubblicare l'app. Assicurarsi di sostituire mySparkApp con il percorso dell'app.

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. Comprimere il contenuto della cartella di pubblicazione, publish.zip ad esempio, creato come risultato del passaggio 1. Tutti gli assembly devono trovarsi nella radice del file ZIP e non deve essere presente alcun livello di cartella intermedio. Ciò significa, che quando si decomprime publish.zip, tutti gli assembly vengono estratti nella directory di lavoro corrente.

    In Windows:

    Usando Windows PowerShell o PowerShell 7, creare un .zip dal contenuto della directory di pubblicazione.

    Compress-Archive publish/* publish.zip -Update
    

    In Linux:

    Aprire una bash shell e cd nella directory bin con tutti i file binari pubblicati ed eseguire il comando seguente.

    zip -r publish.zip
    

.NET per Apache Spark in notebook di Azure Synapse Analytics

I notebook costituiscono un valida opzione per la realizzazione di prototipi di pipeline e scenari di .NET per Apache Spark. È possibile iniziare a usare, comprendere, filtrare e visualizzare i dati in modo rapido ed efficiente.

Data engineer, data scientist, business analyst e machine learning engineer possono collaborare lavorando tutti a un documento condiviso e interattivo. È possibile accedere ai risultati immediati dall'esplorazione dei dati e visualizzare i dati nello stesso notebook.

Come usare .NET per i notebook Apache Spark

Quando si crea un nuovo notebook, è necessario scegliere un kernel del linguaggio con cui esprimere la logica di business. Il supporto del kernel è disponibile per diversi linguaggi, tra cui C#.

Per usare .NET per Apache Spark nel notebook di Azure Synapse Analytics, selezionare .NET Spark (C#) come kernel e collegare il notebook a un pool di Apache Spark esistente.

Il notebook di .NET per Spark si basa su esperienze interattive .NET e offre esperienze interattive C# con la possibilità di usare .NET per Spark con la variabile di sessione spark di Spark già predefinita.

Installare pacchetti NuGet nei notebook

È possibile installare pacchetti NuGet di propria scelta nel notebook usando il comando magic #r nuget prima del nome del pacchetto NuGet. Il diagramma seguente mostra un esempio:

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

Per altre informazioni su come usare i pacchetti NuGet nei notebook, vedere la documentazione interattiva di .NET.

Funzionalità del kernel C# di .NET per Apache Spark

Le funzionalità seguenti sono disponibili quando si usa .NET per Apache Spark nel notebook di Azure Synapse Analytics:

  • HTML dichiarativo: generare l'output dalle celle usando la sintassi HTML, ad esempio intestazioni, elenchi puntati e persino visualizzazione di immagini.
  • Istruzioni C# semplici, ad esempio assegnazioni, stampa alla console, generazione di eccezioni e così via.
  • Blocchi di codice C# su più righe, ad esempio istruzioni if, cicli foreach, definizioni di classi e così via.
  • Accesso alla libreria standard C#, ad esempio System, LINQ, tipi enumerabili e così via.
  • Supporto per le funzionalità del linguaggio C# 8.0.
  • spark come variabile predefinita per consentire l'accesso alla sessione di Apache Spark.
  • Supporto per la definizione di funzioni definite dall'utente .NET che possono essere eseguite all'interno di Apache Spark. È consigliabile scrivere e chiamare funzioni definite dall'utente in ambienti .NET per Apache Spark Interactive per imparare a usare funzioni definite dall'utente in .NET per le esperienze interattive apache Spark.
  • Supporto per la visualizzazione dell'output dei processi Spark con grafici (ad esempio a linee, a barre o istogrammi) e layout (ad esempio singoli, sovrapposti e così via) diversi usando la libreria XPlot.Plotly.
  • Possibilità di includere i pacchetti NuGet nel notebook C#.

Risoluzione dei problemi

DotNetRunner: null / Futures timeout in Esecuzione della definizione del processo Synapse Spark

Le definizioni dei processi Synapse Spark nei pool di Spark che usano Spark 2.4 richiedono Microsoft.Spark 1.0.0. Cancellare le directory bin e obj e pubblicare il progetto usando 1.0.0.

OutOfMemoryError: spazio heap java all'indirizzo org.apache.spark

Dotnet Spark 1.0.0 usa un'architettura di debug diversa da 1.1.1+. Sarà necessario usare la versione 1.0.0 per la versione pubblicata e la versione 1.1.1+ per il debug locale.

Passaggi successivi