Conceitos Essenciais do Spark

Cleiton Moura
3 min readFeb 11, 2022

--

No artigo de hoje, último dos artigos somente conceituais de Spark, falaremos sobre os conceitos essenciais do Spark, conhecimento necessário para o que há de vir.

O que é uma transformation?

Uma transformation são instruções do Spark que geram um novo DataFrame a partir das transformações efetuadas nos dados, sem alterar o dado original. Isso acontece devido à imutabilidade das estruturas de dados principais do Spark. É por transformations que você expressa a lógica de negócio do processamento no Spark.

Exemplos de transformations:

select() e filter()

Referência: https://medium.com/@aristo_alex/how-apache-sparks-transformations-and-action-works-ceb0d03b00d0

O que é uma narrow transformation?

Narrow transformations são as transformações em que uma partição de entrada pode ser processada e gerar dados em uma partição de saída sem a necessidade de acessar e combinar dados de outras partições.

Por exemplo:

filter() e contains() representam narrow transformations porque eles operam em uma única partição e produzem a saída do resultado sem nenhuma troca de dados (shuffle) no cluster.

Referência: https://databricks.com/glossary/what-are-transformations

O que é shuffle?

Shuffle é um mecanismo do Spark que redistribui os dados através de diferentes executores e até por máquinas. Acontece quando são chamadas operações como groupByKey(), reducebyKey(). Join(). Union(), groupBy(), etc.

Spark Shuffle é uma operação altamente custosa já que ela envolve:

  • Escrita em disco
  • Serialização e desserialização de dados
  • Tráfego de rede

Homework: Pesquise por Apache Spark shuffle optimization

Referência: https://0x0fff.com/spark-architecture-shuffle/

O que é uma wide transformation?

Wide transformation são transformações em que os dados de entrada da partição irão contribuir para a saída de outras partições. Normalmente você verá essa transformação sendo referenciada como shuffle já que o Spark irá trocar partições através do cluster.

Por exemplo:

groupBy() e OrderBy() são wide transformations onde os dados de outras partições são lidas, combinadas, e escritas em disco.

groupBy() — Forçará uma embaralhamento de dados em cada uma das partições dos executores do cluster.

OrderBy() — Requer a saída de outras partições para computar a agregação final.

Referência: https://databricks.com/glossary/what-are-transformations

O que é uma action?

Action são ações que instruem o Spark a computar o resultado de uma série de transformações (lazy evaluation).

A action mais simples é o count, que nos dá o número total de registros de um DataFrame.

Existem três categorias de actions:

  • Actions para visualizar dados no console.
  • Actions para coletar dados em objetos nativos da linguagem.
  • Actions para escrever a saída para fontes de dados.

O que é Lazy Evaluation?

Lazy evaluation significa que o Spark irá esperar até o último momento para executar uma sequência de instruções computacionais, ou seja, até que uma action seja acionada ou haver leitura ou escrita em disco. Isso permite uma série de optimizações, pois ele cria um plano de execução otimizado que será executado na fonte de dados, reorganizando, realizando coalesce e optimizando as transformações em stages para uma execução mais eficiente.

Referências

Livro: Spark The Definitive Guide

Livro: Learning Spark

https://sparkbyexamples.com/spark/spark-shuffle-partitions/

--

--

Cleiton Moura

Engenheiro de dados. Formado Técnico em Programação de Computadores e graduando na Fatec. Possui experiência em diversos setores.