Instalação do Spark e SparkSession
Instale o Apache Spark localmente, configure o PySpark, configure a SparkSession e verifique sua instalação
Antes de escrever código Spark, você precisa de uma instalação funcional. Este guia cobre a instalação do Spark localmente, configuração do PySpark e entendimento do ponto de entrada SparkSession.
Pré-requisitos
- Java 8/11/17: Spark executa na JVM. Instale OpenJDK.
- Python 3.8+: Necessário para PySpark.
- pip: Gerenciador de pacotes Python.
# Verificar pré-requisitos
java -version
python --version
pip --versionSpark 3.5.x requer suporte a Java 17 (executa em Java 8/11/17). Spark 3.4 e anteriores funcionam melhor com Java 11.
Instalando o Spark
Opção 1: Usando pip (apenas PySpark)
A maneira mais simples de começar com PySpark:
pip install pysparkIsso instala o PySpark e um runtime Spark pré-construído. Nenhum download separado do Spark é necessário.
Opção 2: Instalação Manual
Baixe de spark.apache.org/downloads.html.
# Extrair Spark
wget https://dlcdn.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz
tar -xzf spark-3.5.1-bin-hadoop3.tgz
sudo mv spark-3.5.1-bin-hadoop3 /opt/spark
# Definir variáveis de ambiente
echo 'export SPARK_HOME=/opt/spark' >> ~/.bashrc
echo 'export PATH=$SPARK_HOME/bin:$PATH' >> ~/.bashrc
echo 'export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH' >> ~/.bashrc
source ~/.bashrcVerificar Instalação
# Executar shell Spark
pyspark
# Ou executar um teste rápido
spark-submit --versionExecutar pyspark inicia uma sessão Spark interativa. Você está pronto para escrever código Spark!
SparkSession
SparkSession é o ponto de entrada unificado para toda a funcionalidade do Spark. Ele substitui SparkContext, SQLContext e HiveContext de versões anteriores.
Criando uma SparkSession
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("MyFirstApp") \
.config("spark.sql.shuffle.partitions", "4") \
.config("spark.executor.memory", "2g") \
.getOrCreate()getOrCreate() reutiliza uma SparkSession existente se houver uma, prevenindo erros ao executar no shell Spark ou ambientes de notebook onde uma sessão já pode estar ativa.
Principais Opções de Configuração
Chave de Configuração | Padrão | Descrição |
|---|---|---|
spark.app.name | (nenhum) | Nome da aplicação para UI |
spark.master | local[*] | URL do cluster ou local[N] |
spark.sql.shuffle.partitions | 200 | Partições para shuffles |
spark.executor.memory | 1g | Memória por executor |
spark.driver.memory | 1g | Memória para driver |
spark.executor.cores | 1 | Núcleos por executor |
spark.sql.adaptive.enabled | true | Otimização AQE |
Modo Local
Para desenvolvimento e testes, use o modo local:
# Usar todos os núcleos disponíveis
spark = SparkSession.builder \
.appName("LocalMode") \
.master("local[*]") \
.getOrCreate()
# Usar exatamente 4 núcleos
spark = SparkSession.builder \
.appName("LocalMode") \
.master("local[4]") \
.getOrCreate()O modo local executa tudo em uma única JVM. É ótimo para aprendizado e testes pequenos, mas não simula o comportamento distribuído real. Condições de corrida ou bugs de serialização podem aparecer apenas no modo cluster.
Métodos de Configuração do PySpark
Usando o método config()
spark = SparkSession.builder \
.appName("ConfigExample") \
.config("spark.sql.shuffle.partitions", "50") \
.config("spark.sql.adaptive.coalescePartitions.enabled", "true") \
.getOrCreate()Usando um dicionário de configuração
conf = {
"spark.sql.shuffle.partitions": "50",
"spark.sql.adaptive.enabled": "true",
"spark.executor.memory": "4g",
"spark.driver.memory": "2g"
}
spark = SparkSession.builder \
.appName("DictConfig") \
.config(map=conf) \
.getOrCreate()Usando spark-defaults.conf
Crie $SPARK_HOME/conf/spark-defaults.conf:
spark.master yarn
spark.executor.memory 8g
spark.driver.memory 2g
spark.sql.shuffle.partitions 200
spark.sql.adaptive.enabled true
Verificando a SparkSession
# Verificar se a sessão Spark está funcionando
print(spark.version)
print(spark.sparkContext.defaultParallelism)
# Teste de sanidade simples
df = spark.range(1, 100)
print(df.count())Configuração Específica de Ambiente
Google Colab / Jupyter
!pip install pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("ColabDemo") \
.master("local[*]") \
.getOrCreate()Databricks
Notebooks Databricks têm uma variável spark pré-configurada. Nenhuma configuração necessária.
# Databricks — spark já existe
display(spark.range(10))Docker
docker run -it --rm \
-p 8888:8888 \
-v $(pwd):/home/jovyan/work \
jupyter/pyspark-notebookProblemas Comuns de Instalação
Problema | Solução |
|---|---|
java not found | Instale JDK 8/11/17 e defina JAVA_HOME |
Py4JJavaError | Incompatibilidade de versão entre PySpark e Spark |
OutOfMemoryError | Aumente spark.driver.memory |
ModuleNotFoundError: pyspark | Ative ambiente virtual ou reinstale |
Aviso HADOOP_HOME | Defina HADOOP_HOME ou ignore no Windows sem Hadoop |
Principais Conclusões
- Instale PySpark via
pip install pysparkpara a configuração mais rápida SparkSessioné o ponto de entrada unificado para todas as APIs Sparklocal[N]executa em N núcleos em uma única JVM para desenvolvimento- A configuração pode ser definida programaticamente ou via arquivos de configuração
- Diferentes ambientes (Colab, Databricks, Docker) têm etapas de configuração específicas
Perguntas de Prática
- Qual é a diferença entre
SparkContexteSparkSession? - O que significa
master("local[*]")? - Como você define a quantidade de memória alocada para cada executor?
- Qual é o propósito de
getOrCreate()vscreate()? - Como você configuraria o número de partições de shuffle?
- Quais métodos de instalação estão disponíveis para PySpark?
- Por que um
Py4JJavaErrorpode ocorrer? - Como você verifica qual versão do Spark está em execução?
- Quais variáveis de ambiente são necessárias para uma instalação manual do Spark?
- Como a configuração do Spark em
spark-defaults.confdifere da configuração programática?