Instalación de Spark y SparkSession
Instala Apache Spark localmente, configura PySpark, configura SparkSession y verifica tu instalación
Instalación de Spark y SparkSession
Antes de escribir código Spark, necesitas una instalación funcional. Esta guía cubre la instalación de Spark localmente, la configuración de PySpark y la comprensión del punto de entrada SparkSession.
Prerrequisitos
- Java 8/11/17: Spark se ejecuta en la JVM. Instala OpenJDK.
- Python 3.8+: Requerido para PySpark.
- pip: Administrador de paquetes de Python.
# Verificar prerrequisitos
java -version
python --version
pip --versionSpark 3.5.x requiere soporte Java 17 (se ejecuta en Java 8/11/17). Spark 3.4 y anteriores funcionan mejor con Java 11.
Instalando Spark
Opción 1: Usando pip (solo PySpark)
La forma más sencilla de empezar con PySpark:
pip install pysparkEsto instala PySpark y un runtime de Spark preconstruido. No se necesita descarga separada de Spark.
Opción 2: Instalación Manual
Descarga de spark.apache.org/downloads.html.
# Extraer 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
# Establecer variables de entorno
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 Instalación
# Ejecutar shell Spark
pyspark
# O ejecutar una prueba rápida
spark-submit --versionEjecutar pyspark lanza una sesión Spark interactiva. ¡Estás listo para escribir código Spark!
SparkSession
SparkSession es el punto de entrada unificado para toda la funcionalidad de Spark. Reemplaza SparkContext, SQLContext y HiveContext de versiones anteriores.
Creando una 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 una SparkSession existente si hay una, evitando errores al ejecutar en el shell Spark o entornos de notebook donde una sesión ya puede estar activa.
Principales Opciones de Configuración
| Clave de Configuración | Predeterminado | Descripción |
|---|---|---|
spark.app.name | (ninguno) | Nombre de la aplicación para UI |
spark.master | local[*] | URL del clúster o local[N] |
spark.sql.shuffle.partitions | 200 | Particiones para shuffles |
spark.executor.memory | 1g | Memoria por ejecutor |
spark.driver.memory | 1g | Memoria para driver |
spark.executor.cores | 1 | Núcleos por ejecutor |
spark.sql.adaptive.enabled | true | Optimización AQE |
Modo Local
Para desarrollo y pruebas, usa el modo local:
# Usar todos los núcleos disponibles
spark = SparkSession.builder \
.appName("LocalMode") \
.master("local[*]") \
.getOrCreate()
# Usar exactamente 4 núcleos
spark = SparkSession.builder \
.appName("LocalMode") \
.master("local[4]") \
.getOrCreate()El modo local ejecuta todo en una sola JVM. Es excelente para aprender y pruebas pequeñas pero no simula el comportamiento distribuido real. Las condiciones de carrera o errores de serialización pueden aparecer solo en modo clúster.
Métodos de Configuración de PySpark
Usando el método config()
spark = SparkSession.builder \
.appName("ConfigExample") \
.config("spark.sql.shuffle.partitions", "50") \
.config("spark.sql.adaptive.coalescePartitions.enabled", "true") \
.getOrCreate()Usando un diccionario de configuración
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
Crea $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 SparkSession
# Verificar que la sesión Spark funciona
print(spark.version)
print(spark.sparkContext.defaultParallelism)
# Prueba de cordura simple
df = spark.range(1, 100)
print(df.count())Configuración Específica de Entorno
Google Colab / Jupyter
!pip install pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("ColabDemo") \
.master("local[*]") \
.getOrCreate()Databricks
Los notebooks de Databricks tienen una variable spark preconfigurada. No se necesita configuración.
# Databricks — spark ya existe
display(spark.range(10))Docker
docker run -it --rm \
-p 8888:8888 \
-v $(pwd):/home/jovyan/work \
jupyter/pyspark-notebookProblemas Comunes de Instalación
| Problema | Solución |
|---|---|
java not found | Instala JDK 8/11/17 y establece JAVA_HOME |
Py4JJavaError | Incompatibilidad de versión entre PySpark y Spark |
OutOfMemoryError | Aumenta spark.driver.memory |
ModuleNotFoundError: pyspark | Activa entorno virtual o reinstala |
Advertencia HADOOP_HOME | Establece HADOOP_HOME o ignora en Windows sin Hadoop |
Conclusiones Clave
- Instala PySpark mediante
pip install pysparkpara la configuración más rápida SparkSessiones el punto de entrada unificado para todas las APIs de Sparklocal[N]se ejecuta en N núcleos en una sola JVM para desarrollo- La configuración se puede establecer programáticamente o mediante archivos de configuración
- Diferentes entornos (Colab, Databricks, Docker) tienen pasos de configuración específicos
Preguntas de Práctica
- ¿Cuál es la diferencia entre
SparkContextySparkSession? - ¿Qué significa
master("local[*]")? - ¿Cómo se establece la cantidad de memoria asignada a cada ejecutor?
- ¿Cuál es el propósito de
getOrCreate()vscreate()? - ¿Cómo configuraría el número de particiones de shuffle?
- ¿Qué métodos de instalación están disponibles para PySpark?
- ¿Por qué podría ocurrir un
Py4JJavaError? - ¿Cómo se verifica qué versión de Spark se está ejecutando?
- ¿Qué variables de entorno se necesitan para una instalación manual de Spark?
- ¿Cómo difiere la configuración de Spark en
spark-defaults.confde la configuración programática?