Si ya sabes Pandas, PySpark va a sentirse familiar en los primeros 10 minutos. Pero hay diferencias importantes que, si no las entiendes desde el inicio, van a generar bugs confusos y pipelines lentos. Este tutorial cubre lo que necesitas saber para usar PySpark de forma efectiva.
Qué es PySpark y cómo se relaciona con Apache Spark
PySpark es la API de Python para Apache Spark. Spark está escrito en Scala, pero PySpark permite llamarlo desde Python. Internamente, PySpark usa Py4J para comunicarse con la JVM donde corre Spark. Desde el punto de vista del developer Python, trabajas con objetos Python normales — el overhead de la comunicación está optimizado para que no sea perceptible.
Configurar PySpark (local y en cloud)
Para local: `pip install pyspark` instala Spark con sus dependencias Python. Necesitas Java 8 o 11 instalado. Para desarrollo diario, Databricks Community Edition (gratis) es mejor opción: tiene un clúster Spark listo en segundos sin configuración.
El punto de entrada: SparkSession
Todo en PySpark empieza con una SparkSession:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("mi-pipeline") \
.getOrCreate()
df = spark.read.parquet("s3://mi-bucket/datos/")
La SparkSession es el punto de acceso a todas las funcionalidades de Spark: lectura de datos, SQL, streaming, ML. En Databricks o EMR ya viene configurada como `spark` — no necesitas crear una.
Transformaciones vs acciones: la diferencia que importa
En PySpark hay dos tipos de operaciones. Las transformaciones (select, filter, groupBy, join, withColumn) son lazy: construyen el plan de ejecución pero no ejecutan nada. Las acciones (show, count, collect, write) disparan la ejecución. El error clásico del principiante es llamar collect() en un DataFrame grande — trae todos los datos a la memoria del driver y lo mata.
PySpark vs Pandas: cuándo usar cada uno
Pandas si: los datos caben en memoria de tu máquina (< 10 GB), necesitas análisis exploratorio rápido, o usas librerías que solo tienen API Pandas (scikit-learn, matplotlib).
PySpark si: los datos son > 10 GB, necesitas procesar en un clúster, trabajas con streaming de datos, o tu pipeline de producción corre en Databricks, EMR o Synapse.
Tips de performance en PySpark
1. Usa cache() o persist() solo cuando vas a reutilizar el DataFrame varias veces. Si lo usas una sola vez, el cache consume memoria innecesariamente.
2. Evita las UDFs (User Defined Functions) en Python cuando sea posible. Las funciones nativas de Spark (pyspark.sql.functions) se ejecutan en la JVM y son mucho más rápidas que UDFs que tienen que serializar datos a Python.
3. El número de particiones importa. Si tienes pocas particiones en un DataFrame grande, el trabajo no se distribuye bien. repartition() para aumentar, coalesce() para reducir antes de escribir.
El curso de Apache Spark Fundamentals de DataPath cubre PySpark desde cero con proyectos reales en Databricks. Para el nivel avanzado con Delta Lake y arquitecturas Lakehouse, el curso de Databricks Data Engineer es el siguiente paso. Ambos son parte de la Ruta Data Engineer.