Plan de Aprendizaje Completo: PySpark
Objetivo: Transformar datos con DataFrames distribuidos: particiones, joins y escrituras que un pipeline pueda repetir.
Metodología: Empieza en local (
local[*]). Cada fase debe poder correr de nuevo y escribir Parquet, no solo mostrarse conshow().
Tus apuntes van en Mis notas.
Índice
- Fase 1: Sesión, lazy evaluation y el cluster
- Fase 2: DataFrames y transformaciones
- Fase 3: Joins, ventanas y agregaciones
- Fase 4: Particiones, shuffle y formato
- Fase 5: Spark SQL y calidad del job
- Proyectos integradores
Fase 1: Sesión, lazy evaluation y el cluster
Meta: Saber qué se ejecuta en el driver y qué se reparte.
-
SparkSession, master local y UI en el puerto 4040 - Transformación vs acción (
selectno calcula;countsí) - Driver, executors, particiones, jobs, stages, tasks
- Por qué
collect()de un dataset grande tumba la máquina - 🧪 Práctica: Lee un CSV grande, cuenta filas y abre la UI para ver el stage.
Fase 2: DataFrames y transformaciones
Meta: Limpiar con la API de columnas, no con un UDF de entrada.
-
select,withColumn,filter,drop,alias - Funciones:
col,when,lit, fechas, strings - Esquema explícito vs inferencia
- Nulos y casteo seguro
- UDF solo cuando no existe función nativa, y el costo que tiene
- 🧪 Práctica: Normaliza un archivo de ventas a un esquema fijo y escribe un sample con
showlimitado.
Fase 3: Joins, ventanas y agregaciones
Meta: Reproducir la lógica de un modelo estrella.
- Joins y explosión de filas;
broadcastde una dimensión chica -
groupBy+agg - Window functions:
row_number,sumacumulado, partición por cliente - Deduplicar con ventana, no con un
dropDuplicatesa ciegas si hay regla de negocio - 🧪 Práctica: Última compra por cliente y venta acumulada del mes.
Fase 4: Particiones, shuffle y formato
Meta: Escribir datos que el siguiente job pueda leer barato.
-
repartitionvscoalesce - Shuffle: cuándo un join o un groupBy lo dispara
- Parquet, partición de carpeta por fecha (
partitionBy) - Compactar archivos pequeños
- 🧪 Práctica: Reescribe el resultado particionado por
anioymesy compara el plan.
Fase 5: Spark SQL y calidad del job
Meta: Poder explicar el plan y probar la transformación.
-
createOrReplaceTempViewy SQL equivalente al DataFrame -
explaina nivel de lectura: scans, exchanges - Cache solo si reutilizas el mismo DataFrame
- Pruebas con
chispao comparando un dataset chico esperado - 🧪 Práctica: Un módulo
transform(df) -> dfcon un test de 10 filas.
Proyectos integradores
- Ingesta diaria a Parquet curado — esquema, deduplicación y partición por fecha.
- Agregado para BI — hecho mensual listo para que Pandas o un dashboard lo lea.
Recursos
| Recurso | Uso |
|---|---|
| Spark SQL guide | DataFrames |
| PySpark API | Funciones |
| Tuning | Shuffle y memoria |
Criterios de avance
| Fase | La dominas cuando... |
|---|---|
| 1 | Señalas qué línea dispara el cómputo |
| 2 | Limpias sin UDF |
| 3 | Un join no multiplica el hecho y lo demuestras con conteos |
| 4 | La salida queda particionada y sin miles de archivos de 1 KB |
| 5 | Un test pequeño protege la función de transformación |