Compartilhar via


Use o .NET para Apache Spark com Azure Synapse Analytics

O .NET para Apache Spark fornece suporte .NET gratuito, open-source e multiplataforma para o Spark.

Ele fornece associações .NET para o Spark, que permitem que você acesse as APIs do Spark por meio de C# e F#. Com o .NET para Apache Spark, você também pode gravar e executar funções definidas pelo usuário para o Spark gravado no .NET. As APIs do .NET para Spark permitem que acessar todos os aspectos dos DataFrames do Spark que ajudam a analisar seus dados, incluindo o Spark SQL, Delta Lake e o fluxo estruturado.

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

Importante

O .NET para Apache Spark é um projeto de código-fonte aberto no .NET Foundation que atualmente requer a biblioteca .NET 3.1, que atingiu o status fora de suporte. Gostaríamos de informar os usuários do Azure Synapse Spark sobre a remoção da biblioteca .NET para Apache Spark no Azure Synapse Runtime para 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 por meio de C# e F# ou executar código C# em notebooks no Synapse ou por meio das definições de trabalho do Apache Spark no Synapse. É importante observar que essa alteração afeta apenas o Azure Synapse Runtime para Apache Spark 3.3 e superior.

Continuaremos a dar suporte a .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 para dar suporte a .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 usuários são aconselhados a tomar nota dessa informação e planejar adequadamente.

Enviar trabalhos em lotes 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 tiver empacotado seu aplicativo para enviar ao Azure Synapse, conclua as etapas a seguir.

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

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

    Crie seu projeto como um aplicativo de console .NET que gera um executável do 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 comandos a seguir 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, publish.zip por exemplo, que foi criada como resultado da Etapa 1. Todos os assemblies devem estar na raiz do arquivo ZIP e não deve haver uma camada de pasta intermediária. Isso significa que, quando você descompacta publish.zip, todos os assemblies são extraídos no diretório de trabalho atual.

    No Windows:

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

    Compress-Archive publish/* publish.zip -Update
    

    No Linux:

    Abra um shell do Bash e um cd no diretório bin com todos os binários publicados e execute o comando a seguir.

    zip -r publish.zip
    

.NET para Apache Spark nos notebooks do Azure Synapse Analytics

Os notebooks são uma ótima opção para criar um protótipo do seu .NET para pipelines e cenários do Apache Spark. Você pode começar a trabalhar com, entender, filtrar, exibir e visualizar seus dados com rapidez e eficiência.

Engenheiros de dados, cientistas de dados, analistas de negócios e engenheiros de aprendizado de máquina são capazes de colaborar em um documento interativo e compartilhado. Você vê resultados imediatos na exploração de dados e pode visualizar seus dados no mesmo notebook.

Como usar o .NET para notebooks do Apache Spark

Ao criar um novo notebook, você escolhe um kernel de linguagem no qual deseja expressar sua lógica de negócios. Suporte para Kernel está disponível para várias linguagens, incluindo C#.

Para usar o .NET para Apache Spark no seu notebook do Azure Synapse Analytics, selecione .NET Spark ( C# ) como o seu Kernel e anexe o notebook a um pool do Apache Spark sem servidor existente.

O notebook .NET Spark se baseia nas experiências interativas do .NET e fornece experiências interativas de C# com a capacidade de usar o .NET para o Spark pronto para uso com a variável spark da sessão do Spark já predefinida.

Instalar pacotes NuGet em notebooks

Você pode instalar pacotes NuGet de sua escolha em seu notebook usando o comando magic #r nuget 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 notebooks, consulte a Documentação interativa do .NET.

Recursos do kernel C# do .NET para Apache Spark

Os recursos a seguir estão disponíveis quando você usa o .NET para Apache Spark no notebook do Azure Synapse Analytics:

  • HTML Declarativo: Gere a saída de suas células usando a sintaxe HTML, como cabeçalhos, listas com marcadores e até mesmo exibindo imagens.
  • Instruções simples de C# (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 Sistema, LINQ, Enumeráveis e assim por diante).
  • Suporte para recursos de linguagem C# 8.0.
  • O spark como uma variável predefinida para dar acesso à sua sessão do Apache Spark.
  • Suporte para definir funções definidas pelo usuário do .NET que podem ser executadas no Apache Spark . Recomendamos Gravar e chamar UDFs no .NET para ambientes interativos do Apache Spark para aprender a usar UDFs no .NET para experiências interativas do Apache Spark.
  • Suporte para visualizar a saída de seus trabalhos do Spark usando diferentes gráficos (como linha, barra ou histograma) e layouts (como único, sobreposto e assim por diante) usando a biblioteca XPlot.Plotly.
  • Capacidade de incluir pacotes NuGet em seu notebook C#.

Solução de problemas

DotNetRunner: null / Futures timeout na execução de definição de trabalho do Synapse Spark

As definições de trabalho do Spark do Synapse nos pools do Spark usando Spark 2.4 exigem Microsoft.Spark 1.0.0. Limpe os diretórios bin e obj e publique o projeto usando a 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ê precisará usar a 1.0.0 para sua versão publicada e a 1.1.1+ para a depuração local.

Próximas etapas