Instalação do Spark e SparkSession
Instale o Apache Spark localmente, configure o PySpark, configure a SparkSession e verifique sua instalação
Instalação do Spark e SparkSession
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?