Apache Spark
LakehouseApresentação
🔥 BLOCO 3 — Apache Spark (guia completo para entrevista)
1️⃣ O que é Apache Spark
Apache Spark é um motor de processamento distribuído de dados usado para processar grandes volumes de dados em clusters.
Permite:
- ETL pipelines
- analytics
- machine learning
- streaming
Processa dados em memória, o que o torna muito mais rápido que sistemas antigos como Hadoop MapReduce.
2️⃣ Arquitetura do Spark
Arquitetura base:
Driver
↓
Cluster Manager
↓
Executors
↓
Tasks
Driver
Responsável por:
- criar o SparkSession
- planear o job
- dividir o trabalho em tasks
- coordenar executors
Executors
São os workers que executam o processamento.
Cada executor:
- corre numa máquina do cluster
- executa tasks
- processa partições de dados
Tasks
Unidade mínima de trabalho.
Uma task processa uma partição de dados.
3️⃣ SparkSession
É o ponto de entrada do Spark.
Exemplo:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("example") \
.getOrCreate()
A partir daqui podes:
- ler dados
- transformar dados
- escrever dados
4️⃣ DataFrames (estrutura principal)
Spark trabalha sobretudo com DataFrames.
Parecido com Pandas mas distribuído.
Exemplo:
df = spark.read.parquet("data/")
Operações comuns:
df.select("name")df.filter(df.age > 18)df.groupBy("country").count()
5️⃣ Lazy Evaluation (conceito essencial)
Spark não executa operações imediatamente.
Ele constrói um plano de execução e só executa quando encontra uma action.
Exemplo:
df = spark.read.parquet("data")
df2 = df.filter(df.age > 18)
df2.select("name")
Nada executa ainda.
Executa apenas quando:
df2.show()- ou
df2.count()
6️⃣ Transformations vs Actions
Transformations
Criam um novo DataFrame.
Exemplos: filter, select, map, join, groupBy
São lazy.
Actions
Executam o plano.
Exemplos: show, count, collect, write
7️⃣ Partitions (muito importante)
Spark divide dados em partições.
Cada partição pode ser processada em paralelo.
Exemplo:
dataset
↓
partition 1 | partition 2 | partition 3 | partition 4
Mais partições → mais paralelismo.
Mas muitas partições → overhead.
Repartition
Redistribui dados.
df = df.repartition(10)
Coalesce
Reduz partições.
df = df.coalesce(2)
Mais eficiente que repartition para reduzir.
8️⃣ Shuffles
Shuffle acontece quando dados precisam de ser redistribuídos entre executors.
Exemplo: groupBy, join, orderBy
Problema:
- caro
- envolve rede
- pode causar lentidão
9️⃣ Joins no Spark
Tipos principais: inner, left, right, full
Problema comum: Data Skew
Quando uma chave tem muitos dados.
Exemplo: country = "USA"
Solução: salting, repartition
Broadcast Join
Quando uma tabela é pequena.
Spark envia essa tabela para todos os executors.
Muito mais rápido.
Exemplo:
from pyspark.sql.functions import broadcast
df.join(broadcast(df_small), "id")
🔟 Small File Problem
Problema clássico em data lakes.
Muitos ficheiros pequenos: 100k files of 1KB
Problema:
- overhead de metadata
- queries lentas
Solução:
- compaction
- optimize jobs
- bigger file sizes
Spark gosta de ficheiros entre: 128MB – 1GB
1️⃣1️⃣ Formats usados com Spark
Parquet
Formato columnar.
Benefícios: compressão, leitura eficiente
Delta Lake
Extensão do Parquet que permite:
- ACID transactions
- time travel
- schema enforcement
Muito usado em Lakehouse.
1️⃣2️⃣ Otimizações importantes
Predicate Pushdown
Spark lê apenas dados necessários.
Partition pruning
Se dados estão particionados por data: date=2026-03-01
Query: WHERE date='2026-03-01'
Spark lê apenas essa partição.
🧠 O que tens de saber explicar bem
Em entrevista:
- o que é Spark
- como funciona lazy execution
- transformations vs actions
- o que são partitions
- o que é shuffle
- como otimizar joins
- small files problem
Se souberes isto já és considerado sólido em Spark.
🎯 10 perguntas que podem sair numa entrevista
- O que é Apache Spark?
- Qual a diferença entre transformation e action?
- O que é lazy evaluation no Spark?
- O que são partitions e porque são importantes?
- O que acontece durante um shuffle?
- Porque é que joins podem ser lentos em Spark?
- O que é um broadcast join?
- O que é o small file problem?
- Como melhorarias a performance de um job Spark lento?
- Qual a diferença entre repartition e coalesce?
Perguntas
Sem perguntas. Clica em Editar para adicionar.