Apache Spark é um motor de processamento distribuído de código aberto que executa computações em memória sobre clusters de máquinas. É o padrão de facto para processamento em larga escala, cobrindo batch, streaming, SQL, machine learning e grafos em uma única plataforma unificada.

Histórico

timeline
    title Evolução do processamento distribuído
    2002 : Google publica o paper do MapReduce
    2003 : Google publica o paper do GFS (Google File System)
    2006 : Yahoo cria o Hadoop (inspirado nos papers do Google)
    2009 : Matei Zaharia cria o Spark no AMPLab da UC Berkeley
    2010 : Spark é publicado como open-source
    2013 : Doado para a Apache Software Foundation
    2014 : Spark 1.0 - primeiro release estável como projeto Apache top-level
    2015 : DataFrame API, DataFrames unificam SQL e código
    2016 : Spark 2.0 - Dataset API, Structured Streaming, Tungsten engine
    2020 : Spark 3.0 - Adaptive Query Execution (AQE), pandas UDFs v2
    2022 : Spark 3.3 - Spark Connect (cliente remoto desacoplado do cluster)
    2024 : Spark 4.0 - Python-first, ANSI SQL por padrão, Spark Connect estável

A motivação original do Spark foi superar as limitações do MapReduce: o modelo de dois passos (map e reduce) forçava a escrita em disco entre cada etapa, tornando algoritmos iterativos (como gradiente descendente em ML) extremamente lentos. O Spark introduziu o conceito de RDD (Resilient Distributed Dataset) e computação em memória, entregando até 100x mais velocidade em workloads iterativos.

Por que Spark supera o MapReduce

AspectoMapReduceSpark
Armazenamento intermediárioDisco (HDFS) entre cada etapaMemória (RAM)
Modelo de execuçãoDois passos fixos (map, reduce)DAG arbitrário de operações
APIsJava verbosoPython, Scala, Java, SQL, R
Suporte a streamingNão nativoStructured Streaming nativo
ML / grafosNecessita frameworks externosMLlib e GraphX integrados
Velocidade em ML iterativoLento (muitas escritas em disco)Muito mais rápido (dados em memória)

Componentes do ecossistema Spark

graph TD
    CORE[Spark Core<br/>RDD Engine, Scheduling, Memory]
    CORE --> SQL[Spark SQL<br/>DataFrame, Catalyst, Thrift Server]
    CORE --> SS[Structured Streaming<br/>Micro-batch e Continuous]
    CORE --> ML[MLlib<br/>Pipelines, Algoritmos de ML]
    CORE --> GX[GraphX<br/>Processamento de Grafos]

Na prática, Spark SQL com DataFrames é o componente mais utilizado, unificando batch e streaming sob a mesma API.

Modos de execução

ModoDescriçãoOnde é usado
LocalExecuta em uma única JVM, sem clusterDesenvolvimento e testes
StandaloneCluster gerenciado pelo próprio SparkAmbientes simples sem YARN
YARNCluster gerenciado pelo Hadoop YARNAmbientes Hadoop legados
KubernetesPods como executoresAmbientes cloud nativos modernos
ManagedDatabricks, Dataproc, EMR, GlueCloud gerenciado

Quando usar Spark

Spark é a escolha certa quando:

  • O volume de dados não cabe em memória de uma única máquina (tipicamente acima de alguns GBs)
  • O processamento é iterativo ou reutiliza os mesmos dados múltiplas vezes (ML, grafos)
  • Há necessidade de unificar batch e streaming na mesma base de código
  • O time já domina PySpark e precisa migrar workloads Hadoop existentes

Alternativas mais simples para datasets menores: DuckDB (SQL local, até dezenas de GBs) ou Polars (Python multi-core, sem cluster).

Instalação local (PySpark)

# Via pip
pip install pyspark
 
# Verificar instalação
python -c "import pyspark; print(pyspark.__version__)"
from pyspark.sql import SparkSession
 
# Criar sessão local (usa todos os cores disponíveis)
spark = SparkSession.builder \
    .appName("meu-app") \
    .master("local[*]") \
    .getOrCreate()
 
# Ler, transformar e escrever
df = spark.read.parquet("/dados/entrada/")
df.filter("status = 'ativo'").write.parquet("/dados/saida/")
 
spark.stop()

Deep dive

  • spark-arquitetura: Driver, Executor, Cluster Manager, Job/Stage/Task, Shuffle, modelo de memória
  • spark-apis: RDD vs DataFrame vs Dataset, transformações, ações, schema
  • spark-sql: Catalyst optimizer, planos de execução, UDFs, catálogo e metastore
  • spark-streaming: Structured Streaming, triggers, watermarks, operações com estado
  • spark-performance: particionamento, AQE, broadcast join, caching, skew, bucketing
  • spark-troubleshooting: OOM, skew, GC, Spark UI, configurações críticas

Ver também: big-data | gcp-dataproc | gcp-dataflow | ferramentas-engenharia-dados | data-lake-lakehouse | pipeline-de-dados