
🚀 Al pasar de principiante a nivel intermedio en PySpark, el reto no es memorizar más funciones: es entender cómo se mueve la información dentro del trabajo distribuido.
Un DataFrame se divide en particiones que pueden procesarse en paralelo. Muy pocas particiones desaprovechan la CPU; demasiadas crean tareas pequeñas y costos de coordinación. repartition() redistribuye los datos, mientras coalesce() reduce particiones con menos movimiento, algo útil para evitar demasiados archivos al escribir Parquet.
El concepto central es el shuffle: la redistribución de datos entre particiones. Operaciones como groupBy(), join(), distinct(), orderBy() y repartition() pueden provocarlo y suelen ser costosas.
Para mejorar el rendimiento, filtra y selecciona columnas antes de un join, mantén las claves con el mismo tipo y revisa si realmente necesitas mover todo el dataset. También conviene cachear solo DataFrames reutilizados y observar el plan de ejecución antes de cambiar configuraciones al azar.
El autor propone una idea práctica: cuando un job se vuelve lento, busca primero dónde está viajando la información. Muchas veces la causa es un shuffle innecesario, un join demasiado grande o una partición mal dimensionada.
💡 Explicación en pocas palabras#
Imagina que Spark reparte cajas entre varios trabajadores. Si cada trabajador tiene las cajas correctas, avanzan en paralelo. Si deben intercambiarlas para agruparlas o ordenarlas, pierden tiempo. Esas transferencias son los shuffles: inevitables a veces, pero conviene reducirlas.
Más información en el link 👇

