Uso de .NET para Apache Spark con Azure Synapse Analytics

.NET para Apache Spark proporciona un marco gratuito, de código abierto y multiplataforma de .NET para Spark.

Ofrece enlaces de .NET para Spark que permiten acceder a las API de Spark con C# y F#. Con .NET para Apache Spark, también puede escribir y ejecutar funciones definidas por el usuario para Spark escritas en .NET. Las API de .NET para Spark le permiten acceder a todos los aspectos de las tramas de datos Spark que le ayudan a analizar los datos, incluido Spark SQL, Delta Lake y Structured Streaming.

Puede analizar los datos con .NET para Apache Spark a través de definiciones de trabajos por lotes de Spark o con cuadernos interactivos de Azure Synapse Analytics. En este artículo, aprenderá a usar .NET para Apache Spark con Azure Synapse mediante ambas técnicas.

Importante

.NET para Apache Spark es un proyecto de código abierto en .NET Foundation que actualmente requiere la biblioteca de .NET 3.1, que ya no tiene compatibilidad con el estado de asistencia. Nos gustaría informar a los usuarios de Azure Synapse Spark de la eliminación de la biblioteca de .NET para Apache Spark en la versión 3.3 de Azure Synapse Runtime para Apache Spark. Los usuarios pueden consultar la directiva de soporte técnico de .NET para obtener más detalles sobre este asunto.

Como resultado, ya no será posible que los usuarios usen las API de Apache Spark a través de C# y F#, o bien ejecuten código de C# en cuadernos de Synapse o mediante definiciones de trabajos de Apache Spark en Synapse. Es importante tener en cuenta que este cambio solo afecta a Azure Synapse Runtime para Apache Spark 3.3 y versiones posteriores.

Se seguirá admitiendo .NET para Apache Spark en todas las versiones anteriores de Azure Synapse Runtime según sus fases de ciclo de vida. Sin embargo, no tenemos planes para admitir .NET para Apache Spark en Azure Synapse Runtime para Apache Spark 3.3 y versiones futuras. Se recomienda que los usuarios con cargas de trabajo existentes escritas en C# o F# migren a Python o Scala. Se recomienda a los usuarios tomar nota de esta información y planear en consecuencia.

Envío de trabajos por lotes mediante la definición de trabajos de Spark

Visite el tutorial para aprender a usar Azure Synapse Analytics para crear definiciones de trabajos de Spark para grupos de Synapse Spark. Si no ha empaquetado la aplicación para enviarla a Azure Synapse, complete los pasos siguientes.

  1. Configure las dependencias de la aplicación dotnet para obtener compatibilidad con Synapse Spark. La versión de .NET Spark necesaria se indicará en la interfaz Synapse Studio en la configuración del grupo de Apache Spark, en el cuadro de herramientas Administrar.

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

    Cree el proyecto como una aplicación de consola de .NET que genere un archivo ejecutable de 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. Ejecute los siguientes comandos para publicar la aplicación. Asegúrese de reemplazar mySparkApp por la ruta de acceso a su aplicación.

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. Comprima el contenido de la carpeta de publicación (por ejemplo, publish.zip) que se creó como resultado del paso 1. Todos los elementos ensamblados deben estar en la capa del archivo ZIP y no debe haber ninguna capa de carpeta intermedia. Esto significa que, al descomprimir publish.zip, todos los elementos ensamblados se extraen en el directorio de trabajo actual.

    En Windows:

    Con Windows PowerShell o PowerShell 7, cree un .zip a partir del contenido del directorio de publicación.

    Compress-Archive publish/* publish.zip -Update
    

    En Linux:

    Abra un shell de bash, cambie al directorio bin con todos los archivos binarios publicados y ejecute el siguiente comando.

    zip -r publish.zip
    

.NET para Apache Spark en cuadernos de Azure Synapse Analytics

Los cuadernos son una excelente opción para la generación de prototipos de canalizaciones y escenarios de .NET para Apache Spark. Puede empezar a trabajar con los datos, comprenderlos, filtrarlos, mostrarlos y visualizarlos de forma rápida y eficaz.

Los ingenieros de datos, científicos de datos, analistas de negocios e ingenieros de aprendizaje automático pueden colaborar en un documento compartido e interactivo. Verá resultados inmediatos de la exploración de datos y podrá visualizar los datos en el mismo cuaderno.

Cómo usar .NET para cuadernos de Apache Spark

Al crear un cuaderno, elige un kernel de lenguaje en el que quiere expresar la lógica de negocios. El kernel admite varios lenguajes, incluido C#.

Para usar .NET para Apache Spark en el cuaderno de Azure Synapse Analytics, seleccione .NET Spark (C#) como kernel y conecte el cuaderno a un grupo de Apache Spark sin servidor existente.

El cuaderno de .NET Spark se basa en las experiencias interactivas de .NET y proporciona experiencias interactivas de C# con la capacidad de usar .NET para Spark de forma predefinida con la variable de sesión de Spark spark ya predefinida.

Instalación de paquetes NuGet en cuadernos

Puede instalar los paquetes NuGet que prefiera en el cuaderno con comando magic #r nuget antes del nombre del paquete NuGet. En el diagrama siguiente se muestra un ejemplo:

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

Para obtener más información sobre cómo trabajar con paquetes NuGet en cuadernos, consulte la documentación interactiva de .NET.

Características de .NET para el kernel C# de Apache Spark

Las siguientes características están disponibles cuando se usa .NET para Apache Spark en el cuaderno de Azure Synapse Analytics:

  • HTML declarativa: Genere resultados a partir de las celdas con sintaxis HTML, como encabezados, listas con viñetas e, incluso, mostrar imágenes.
  • Instrucciones simples de C# (como asignaciones, impresión en la consola, generación de excepciones, etc.).
  • Bloques de código de varias líneas de C# (como instrucciones if, bucles foreach, definiciones de clase, etc.).
  • Acceso a la biblioteca estándar de C# (como System, LINQ, Enumerable, etc.).
  • Compatibilidad con las características del lenguaje C# 8.0.
  • spark como variable predefinida para darle acceso a la sesión de Apache Spark.
  • Compatibilidad para definir funciones definidas por el usuario de .NET que se pueden ejecutar en Apache Spark. Le recomendamos leer Escritura y llamada a UDF en entornos interactivos de .NET para Apache Spark para aprender a usar UDF en experiencias interactivas de .NET para Apache Spark.
  • Compatibilidad para visualizar la salida de los trabajos de Spark con distintos gráficos (como líneas, barras o histogramas), y diseños (como único, superpuesto, etc.) mediante la biblioteca de XPlot.Plotly.
  • Posibilidad de incluir paquetes NuGet en el cuaderno de C#.

Solución de problemas

DotNetRunner: null / Futures timeout en la ejecución de la definición de trabajo de Synapse Spark

Las definiciones de trabajos de Synapse Spark en grupos de Spark mediante Spark 2.4 requieren Microsoft.Spark 1.0.0. Borre los directorios bin y obj, y publique el proyecto con 1.0.0.

OutOfMemoryError: espacio de montón de Java en org.apache.spark

Dotnet Spark 1.0.0 usa una arquitectura de depuración diferente a 1.1.1+. Tendrá que usar 1.0.0 para la versión publicada y 1.1.1+ para la depuración local.

Pasos siguientes