Utilizar .NET para Apache Spark com o Azure Synapse Analytics

O .NET para Apache Spark fornece suporte .NET gratuito, de código aberto e multiplataforma para o Spark.

Ele fornece ligações .NET para o Spark, que permite acessar APIs do Spark por meio de C# e F#. Com o .NET para Apache Spark, você também pode escrever e executar funções definidas pelo usuário para o Spark escritas em .NET. As APIs do .NET para Spark permitem que você acesse todos os aspetos do Spark DataFrames que ajudam a analisar seus dados, incluindo Spark SQL, Delta Lake e Structured Streaming.

Você pode analisar dados com o .NET para Apache Spark por meio de definições de trabalho em lote do Spark ou com blocos de anotações interativos do Azure Synapse Analytics. Neste artigo, você aprenderá a usar o .NET para Apache Spark com o Azure Synapse usando ambas as técnicas.

Importante

O .NET para Apache Spark é um projeto de código aberto sob o .NET Foundation que atualmente requer a biblioteca .NET 3.1, que atingiu o status de fora do suporte. Gostaríamos de informar os usuários do Azure Synapse Spark sobre a remoção da biblioteca .NET for Apache Spark no Azure Synapse Runtime for Apache Spark versão 3.3. Os usuários podem consultar a Política de Suporte do .NET para obter mais detalhes sobre esse assunto.

Como resultado, não será mais possível para os usuários utilizar APIs do Apache Spark via C# e F#, ou executar código C# em notebooks dentro do Synapse ou através de definições do Apache Spark Job no Synapse. É importante observar que essa alteração afeta apenas o Azure Synapse Runtime para Apache Spark 3.3 e superior.

Continuaremos a oferecer suporte ao .NET para Apache Spark em todas as versões anteriores do Azure Synapse Runtime de acordo com seus estágios de ciclo de vida. No entanto, não temos planos de oferecer suporte ao .NET para Apache Spark no Azure Synapse Runtime para Apache Spark 3.3 e versões futuras. Recomendamos que os usuários com cargas de trabalho existentes escritas em C# ou F# migrem para Python ou Scala. Os utilizadores são aconselhados a tomar nota desta informação e planear em conformidade.

Enviar trabalhos em lote usando a definição de trabalho do Spark

Visite o tutorial para saber como usar o Azure Synapse Analytics para criar definições de trabalho do Apache Spark para pools do Synapse Spark. Se você não empacotou seu aplicativo para enviar ao Azure Synapse, conclua as etapas a seguir.

  1. Configure as dependências do aplicativo para compatibilidade com o dotnet Synapse Spark. A versão necessária do .NET Spark será anotada na interface do Synapse Studio na configuração do Apache Spark Pool, na caixa de ferramentas Gerenciar.

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

    Crie seu projeto como um aplicativo de console .NET que produz um executável 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. Execute os seguintes comandos para publicar seu aplicativo. Certifique-se de substituir mySparkApp pelo caminho para seu aplicativo.

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. Compacte o conteúdo da pasta de publicação, por exemplo, publish.zip que foi criada como resultado da Etapa 1. Todos os assemblies devem estar na raiz do arquivo ZIP e não deve haver nenhuma camada de pasta intermediária. Isso significa que, quando você descompacta publish.zip, todos os assemblies são extraídos para o diretório de trabalho atual.

    No Windows:

    Usando o Windows PowerShell ou o PowerShell 7, crie um .zip a partir do conteúdo do diretório de publicação.

    Compress-Archive publish/* publish.zip -Update
    

    No Linux:

    Abra um shell bash e cd no diretório bin com todos os binários publicados e execute o seguinte comando.

    zip -r publish.zip
    

.NET para Apache Spark em blocos de anotações do Azure Synapse Analytics

Os notebooks são uma ótima opção para prototipar seus pipelines e cenários do .NET para Apache Spark. Você pode começar a trabalhar, entender, filtrar, exibir e visualizar seus dados de forma rápida e eficiente.

Engenheiros de dados, cientistas de dados, analistas de negócios e engenheiros de aprendizado de máquina podem colaborar em um documento compartilhado e interativo. Você vê os resultados imediatos da exploração de dados e pode visualizar seus dados no mesmo bloco de anotações.

Como usar o .NET para notebooks Apache Spark

Ao criar um novo bloco de anotações, você escolhe um kernel de linguagem que deseja expressar sua lógica de negócios. O suporte ao kernel está disponível para várias linguagens, incluindo C#.

Para usar o .NET para Apache Spark em seu bloco de anotações do Azure Synapse Analytics, selecione .NET Spark (C#) como seu kernel e anexe o bloco de anotações a um pool Apache Spark sem servidor existente.

O bloco de anotações do .NET Spark é baseado nas experiências interativas do .NET e fornece experiências interativas em C# com a capacidade de usar o .NET para Spark pronto para uso com a variável spark de sessão do Spark já predefinida.

Instalar pacotes NuGet em blocos de anotações

Você pode instalar pacotes NuGet de sua escolha em seu bloco de anotações usando o #r nuget comando magic antes do nome do pacote NuGet. O diagrama a seguir mostra um exemplo:

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

Para saber mais sobre como trabalhar com pacotes NuGet em blocos de anotações, consulte a Documentação interativa do .NET.

Funcionalidades do kernel em C# do .NET para Apache Spark

Os seguintes recursos estão disponíveis quando você usa o .NET para Apache Spark no bloco de anotações do Azure Synapse Analytics:

  • HTML declarativo: gere saída de suas células usando sintaxe HTML, como cabeçalhos, listas com marcadores e até mesmo exibição de imagens.
  • Instruções C# simples (como atribuições, impressão no console, lançamento de exceções e assim por diante).
  • Blocos de código C# de várias linhas (como instruções if, loops foreach, definições de classe e assim por diante).
  • Acesso à biblioteca C# padrão (como System, LINQ, Enumerables e assim por diante).
  • Suporte para recursos de linguagem C# 8.0.
  • spark como uma variável predefinida para lhe dar acesso à sua sessão do Apache Spark.
  • Suporte para definir funções definidas pelo usuário .NET que podem ser executadas no Apache Spark. Recomendamos escrever e chamar UDFs no .NET para ambientes Apache Spark Interactive para aprender a usar UDFs no .NET para experiências do Apache Spark Interactive.
  • Suporte para visualizar a saída de seus trabalhos do Spark usando gráficos diferentes (como linha, barra ou histograma) e layouts (como único, sobreposto e assim por diante) usando a XPlot.Plotly biblioteca.
  • Capacidade de incluir pacotes NuGet em seu bloco de anotações C#.

Resolução de problemas

DotNetRunner: null / Futures timeout em Synapse Spark Job Definition Run

As definições de trabalho do Synapse Spark em pools de faíscas usando o Spark 2.4 exigem Microsoft.Spark 1.0.0. Limpe seus bin diretórios e obj publique o projeto usando 1.0.0.

OutOfMemoryError: espaço de heap java em org.apache.spark

O Dotnet Spark 1.0.0 usa uma arquitetura de depuração diferente da 1.1.1+. Você terá que usar 1.0.0 para sua versão publicada e 1.1.1+ para depuração local.

Próximos passos