Ir para o conteúdo principal

Apresentando o Apache Spark 4.0

Agora disponível no Databricks Runtime 17.0

Apache Spark 4.0

Apache Spark 4.0 marca um marco importante na evolução do motor de análise Spark. Este lançamento traz avanços significativos em todos os aspectos - desde melhorias na linguagem SQL e conectividade expandida, até novas capacidades em Python, melhorias no streaming e melhor usabilidade. O Spark 4.0 foi projetado para ser mais poderoso, compatível com ANSI e mais amigável do que nunca, mantendo a compatibilidade com as cargas de trabalho Spark existentes. Neste post, explicamos as principais características e melhorias introduzidas no Spark 4.0 e como elas aprimoram sua experiência de processamento de big data.

Os destaques principais do Spark 4.0 incluem:

  • Melhorias na Linguagem SQL: Novas capacidades incluindo script SQL com variáveis de sessão e controle de fluxo, Funções Definidas pelo Usuário (UDFs) SQL reutilizáveis, e uma sintaxe PIPE intuitiva para simplificar e otimizar fluxos de trabalho analíticos complexos.
  • Melhorias no Spark Connect: Spark Connect - a nova arquitetura cliente-servidor do Spark - agora alcança alta paridade de recursos com o Spark Classic no Spark 4.0. Esta versão adiciona compatibilidade aprimorada entre Python e Scala, suporte a múltiplos idiomas (com novos clientes para Go, Swift e Rust), e um caminho de migração mais simples através da nova configuração spark.api.mode. Os desenvolvedores podem alternar sem problemas do Spark Classic para o Spark Connect para se beneficiar de uma arquitetura mais modular, escalável e flexível.
  • Melhorias de Confiabilidade e Produtividade: O modo ANSI SQL ativado por padrão garante uma integridade de dados mais rigorosa e melhor interoperabilidade, complementada pelo tipo de dados VARIANT para um manuseio eficiente de dados JSON semi-estruturados e registro JSON estruturado para melhor observabilidade e solução de problemas mais fácil.
  • Avanços na API Python: Plotagem nativa baseada em Plotly diretamente em DataFrames PySpark, uma API de Fonte de Dados Python que permite conectores personalizados de Python em lote e streaming, e UDTFs polimórficos em Python para suporte de esquema dinâmico e maior flexibilidade.
  • Avanços no Structured Streaming: Nova API de Processamento Stateful Arbitrário chamada transformWithState em Scala, Java e Python para lógica stateful personalizada robusta e tolerante a falhas, melhorias na usabilidade da loja de estado e uma nova Fonte de Dados da Loja de Estado para melhor debugabilidade e observabilidade.

Nas seções abaixo, compartilhamos mais detalhes sobre essas funcionalidades empolgantes e, no final, fornecemos links para os esforços relevantes do JIRA e postagens de blog aprofundadas para aqueles que desejam aprender mais. Spark 4.0 representa uma plataforma robusta e preparada para o futuro para o processamento de dados em larga escala, combinando a familiaridade do Spark com novas capacidades que atendem às necessidades modernas de engenharia de dados.

Principais Melhorias no Spark Connect

Uma das atualizações mais empolgantes no Spark 4.0 é a melhoria geral do Spark Connect, em particular o cliente Scala. Com o Spark 4, todos os recursos do Spark SQL oferecem compatibilidade quase completa entre o modo de execução Spark Connect e Classic, com apenas pequenas diferenças restantes. Spark Connect é a nova arquitetura cliente-servidor para Spark que desacopla o aplicativo do usuário do cluster Spark, e na versão 4.0, está mais capaz do que nunca:

  • Melhor Compatibilidade: Uma grande conquista para o Spark Connect no Spark 4 é a melhor compatibilidade das APIs Python e Scala, que torna a troca entre o uso do Spark Classic e Spark Connect perfeita. Isso significa que, para a maioria dos casos de uso, tudo o que você precisa fazer é habilitar o Spark Connect para suas aplicações, definindo spark.api.mode para connect. Recomendamos começar a desenvolver novos trabalhos e aplicações com o Spark Connect habilitado para que você possa se beneficiar ao máximo do poderoso motor de otimização e execução de consultas do Spark.
  • Suporte Multi-Idioma: Spark Connect na versão 4.0 suporta uma ampla gama de idiomas e ambientes. Os clientes Python e Scala são totalmente suportados, e novos clientes connect suportados pela comunidade para Go, Swift e Rust estão disponíveis. Este suporte a múltiplos idiomas significa que os desenvolvedores podem usar o Spark no idioma de sua escolha, mesmo fora do ecossistema JVM, através da API Connect. Por exemplo, uma aplicação de engenharia de dados em Rust ou um serviço em Go agora podem se conectar diretamente a um cluster Spark e executar consultas DataFrame, expandindo o alcance do Spark além de sua base de usuários tradicional.

Recursos da Linguagem SQL

O Spark 4.0 adiciona novas capacidades para simplificar a análise de dados:

  • Funções Definidas pelo Usuário SQL (UDFs) - Spark 4.0 introduz UDFs SQL, permitindo que os usuários definam funções personalizadas reutilizáveis diretamente em SQL. Essas funções simplificam a lógica complexa, melhoram a manutenibilidade e se integram perfeitamente com o otimizador de consultas do Spark, melhorando o desempenho da consulta em comparação com as UDFs baseadas em código tradicionais. As UDFs SQL suportam definições temporárias e permanentes, facilitando para as equipes compartilharem lógica comum em várias consultas e aplicações. Leia a publicação no blog
  • Sintaxe SQL PIPE - Spark 4.0 introduz uma nova sintaxe PIPE, permitindo aos usuários encadear operações SQL usando o operador |>. Essa abordagem de estilo funcional melhora a legibilidade e a manutenibilidade da consulta, permitindo um fluxo linear de transformações. A sintaxe PIPE é totalmente compatível com o SQL existente, permitindo uma adoção e integração gradual nos fluxos de trabalho atuais. Leia a publicação no blog
  • Colações conscientes de idioma, sotaque e caixa - Spark 4.0 introduz uma nova propriedade COLLATE para tipos STRING. Você pode escolher entre muitas colações conscientes de idioma e região para controlar como o Spark determina a ordem e as comparações. Você também pode decidir se as colações devem ser insensíveis a caixa, sotaque e espaços em branco finais. Leia a publicação no blog
  • Variáveis de sessão - Spark 4.0 introduz variáveis locais de sessão, que podem ser usadas para manter e gerenciar o estado dentro de uma sessão sem usar variáveis do idioma hospedeiro. Leia a publicação no blog
  • Marcadores de parâmetros - Spark 4.0 introduz marcadores de parâmetros nomeados (" :var") e não nomeados ("?"). Este recurso permite que você parametrize consultas e passe valores de forma segura através do spark.sql() api. Isso mitiga o risco de injeção de SQL. Consulte a documentação.
  • Scripting SQL: Escrever fluxos de trabalho SQL de várias etapas é mais fácil no Spark 4.0 graças às novas capacidades de scripting SQL. Agora você pode executar scripts SQL de várias instruções com recursos como variáveis locais e controle de fluxo. Esta melhoria permite que os engenheiros de dados movam partes da lógica ETL para SQL puro, com o Spark 4.0 suportando construções que anteriormente só eram possíveis por meio de linguagens externas ou procedimentos armazenados. Em breve, essa funcionalidade será ainda mais aprimorada com o tratamento de condições de erro. Leia a publicação no blog

Integridade de Dados e Produtividade do Desenvolvedor

Spark 4.0 introduz várias atualizações que tornam a plataforma mais confiável, compatível com os padrões e fácil de usar. Esses aprimoramentos simplificam tanto os fluxos de trabalho de desenvolvimento quanto de produção, garantindo maior qualidade de dados e resolução de problemas mais rápida.

  • Modo ANSI SQL: Uma das mudanças mais significativas no Spark 4.0 é a ativação do modo ANSI SQL por padrão, alinhando o Spark mais de perto com a semântica padrão do SQL. Essa mudança garante um manuseio de dados mais rigoroso, fornecendo mensagens de erro explícitas para operações que anteriormente resultavam em truncamentos silenciosos ou nulos, como estouros numéricos ou divisão por zero. Além disso, a adesão aos padrões ANSI SQL melhora muito a interoperabilidade, simplificando a migração de cargas de trabalho SQL de outros sistemas e reduzindo a necessidade de reescritas extensivas de consultas e requalificação da equipe. No geral, esse avanço promove fluxos de trabalho de dados mais claros, confiáveis e portáteis. Consulte a documentação.
  • Novo Tipo de Dados VARIANT: Apache Spark 4.0 introduz o novo tipo de dados VARIANT projetado especificamente para dados semi-estruturados, permitindo o armazenamento de estruturas complexas JSON ou semelhantes a mapas dentro de uma única coluna, mantendo a capacidade de consultar eficientemente campos aninhados. Esta poderosa capacidade oferece uma flexibilidade de esquema significativa, tornando mais fácil a ingestão e o gerenciamento de dados que não se conformam a esquemas predefinidos. Além disso, a indexação e análise integradas de campos JSON do Spark melhoram o desempenho da consulta, facilitando buscas rápidas e transformações. Ao minimizar a necessidade de etapas repetidas de evolução de esquema, VARIANT simplifica os pipelines ETL, resultando em fluxos de trabalho de processamento de dados mais simplificados. Leia a publicação no blog
  • Registro Estruturado: Spark 4.0 introduz um novo framework de registro estruturado que simplifica a depuração e o monitoramento. Ao habilitar spark.log.structuredLogging.enabled=true, Spark escreve logs como linhas JSON - cada entrada incluindo campos estruturados como timestamp, nível de log, mensagem e contexto completo do Mapped Diagnostic Context (MDC). Este formato moderno simplifica a integração com ferramentas de observabilidade como Spark SQL, ELK e Splunk, tornando os logs muito mais fáceis de analisar, pesquisar e analisar. [Saiba mais]

Avanços da API Python

Os usuários de Python têm muito o que comemorar no Spark 4.0. Esta versão torna o Spark mais Pythonic e melhora o desempenho das cargas de trabalho do PySpark:

  • Suporte Nativo para Plotagem: A exploração de dados no PySpark acabou de ficar mais fácil - Spark 4.0 adiciona capacidades de plotagem nativas aos DataFrames do PySpark. Agora você pode chamar um .plot() método ou use uma API associada em um DataFrame para gerar gráficos diretamente dos dados do Spark, sem coletar manualmente os dados para pandas. Por baixo dos panos, o Spark usa o Plotly como o backend de visualização padrão para renderizar gráficos. Isso significa que tipos comuns de gráficos, como histogramas e gráficos de dispersão, podem ser criados com uma linha de código em um DataFrame PySpark, e o Spark cuidará de buscar uma amostra ou agregado dos dados para plotar em um notebook ou GUI. Ao suportar a plotagem nativa, o Spark 4.0 simplifica a análise exploratória de dados - você pode visualizar distribuições e tendências do seu conjunto de dados sem sair do contexto Spark ou escrever código matplotlib/plotly separado. Este recurso é uma grande vantagem de produtividade para cientistas de dados que usam PySpark para EDA.
  • Python Data Source API: Spark 4.0 introduz uma nova API Python DataSource que permite aos desenvolvedores implementar fontes de dados personalizadas para processamento em lote e streaming inteiramente em Python. Anteriormente, escrever um conector para um novo formato de arquivo, banco de dados ou fluxo de dados geralmente exigia conhecimento em Java/Scala. Agora, você pode criar leitores e escritores em Python, o que abre o Spark para uma comunidade mais ampla de desenvolvedores. Por exemplo, se você tem um formato de dados personalizado ou uma API que só tem um cliente Python, você pode envolvê-lo como uma fonte/pia do Spark DataFrame usando esta API. Este recurso melhora muito a extensibilidade para PySpark em contextos de lote e streaming. Veja o post de aprofundamento em PySpark para um exemplo de implementação de uma fonte de dados personalizada simples em Python ou confira um exemplo de exemplos aqui. Leia a publicação no blog
  • UDTFs Polimórficas em Python: Com base na capacidade SQL UDTF, o PySpark agora suporta Funções de Tabela Definidas pelo Usuário em Python, incluindo UDTFs polimórficas que podem retornar diferentes formas de esquema dependendo da entrada. Você pode criar uma classe Python como uma UDTF usando um decorador que gera um iterador de linhas de saída, e registrá-la para que possa ser chamada do Spark SQL ou da API DataFrame. Um aspecto poderoso são as UDTFs de esquema dinâmico - sua UDTF pode definir um método analyze() para produzir um esquema em tempo real com base em parâmetros, como a leitura de um arquivo de configuração para determinar as colunas de saída. Esse comportamento polimórfico torna as UDTFs extremamente flexíveis, possibilitando cenários como o processamento de um esquema JSON variável ou a divisão de uma entrada em um conjunto variável de saídas. PySpark UDTFs permitem efetivamente que a lógica Python produza um resultado de tabela completa por invocação, tudo dentro do motor de execução Spark. Consulte a documentação.

Melhorias no Streaming

Apache Spark 4.0 continua a refinar o Structured Streaming para melhor desempenho, usabilidade e observabilidade:

  • Processamento de Estado Arbitrário v2: O Spark 4.0 introduz um novo operador de Processamento de Estado Arbitrário chamado transformWithState. TransformWithState permite a construção de pipelines operacionais complexos com suporte para definição de lógica orientada a objetos, tipos compostos, suporte para temporizadores e TTL, suporte para manipulação de estado inicial, evolução do esquema de estado e uma série de outros recursos. Esta nova API está disponível em Scala, Java e Python e oferece integrações nativas com outros recursos importantes, como leitor de fonte de dados de estado, manipulação de metadados do operador, etc. [Leia o post do blog]
  • Fonte de Dados de Estado - Leitor: Spark 4.0 adiciona a capacidade de consultar o estado de streaming como uma tabela. Esta nova fonte de dados de armazenamento de estado expõe o estado interno usado em agregações de streaming com estado (como contadores, janelas de sessão, etc.), junções etc como um DataFrame legível. Com opções adicionais, este recurso também permite aos usuários rastrear mudanças de estado em uma base de atualização por atualização para visibilidade refinada. Este recurso também ajuda a entender em que estado seu trabalho de streaming está processando e pode auxiliar ainda mais na solução de problemas e monitoramento da lógica com estado de seus streams, bem como na detecção de qualquer corrupção subjacente ou violações de invariantes. Leia a publicação no blog
  • Aprimoramentos do State Store: Spark 4.0 também adiciona inúmeras melhorias no state store, como gerenciamento aprimorado de reutilização de arquivos de Tabela Ordenada Estática (SST), melhorias no gerenciamento de snapshots e manutenção, formato de checkpoint de estado reformulado, bem como melhorias adicionais de desempenho. Junto com isso, várias mudanças foram adicionadas em torno de um registro e classificação de erros aprimorados para facilitar o monitoramento e a depurabilidade.

Agradecimentos

Spark 4.0 é um grande avanço para o projeto Apache Spark, com otimizações e novos recursos tocando em todas as camadas - desde melhorias no núcleo até APIs mais ricas. Neste lançamento, a comunidade fechou mais de 5000 problemas do JIRA e cerca de 400 contribuidores individuais - de desenvolvedores independentes a organizações como Databricks, Apple, Linkedin, Intel, OpenAI, eBay, Netease, Baidu - impulsionaram esses aprimoramentos.

Estendemos nossos sinceros agradecimentos a cada contribuidor, seja você quem preencheu um ticket, revisou código, melhorou a documentação ou compartilhou feedback em listas de discussão. Além das melhorias principais em SQL, Python e streaming, Spark 4.0 também oferece suporte a Java 21, operador Spark K8S, conectores XML, suporte Spark ML no Connect e PySpark UDF Unified Profiling. Para a lista completa de alterações e todos os outros refinamentos no nível do motor, consulte as notas de lançamento do Spark 4.0 oficiais.

apache spark

Obtendo Spark 4.0: Obtendo Spark 4.0: É totalmente open source - faça o download em spark.apache.org. Muitos de seus recursos já estavam disponíveis no Databricks Runtime 15.x e 16.x, e agora eles são fornecidos de fábrica com o Runtime 17.0. Para explorar o Spark 4.0 em um ambiente gerenciado, inscreva-se na edição gratuita da Comunidade ou inicie um teste, escolha "17.0" quando iniciar seu cluster, e você estará executando o Spark 4.0 em minutos.

Versão do Databricks Runtime

Se você perdeu nosso encontro do Spark 4.0 onde discutimos esses recursos, você pode ver as gravações aqui. Além disso, fique atento para futuros meetups de aprofundamento sobre esses recursos do Spark 4.0.

 

(This blog post has been translated using AI-powered tools) Original Post

Nunca perca uma postagem da Databricks

Inscreva-se nas categorias de seu interesse e receba as últimas postagens na sua caixa de entrada