Skip to content

Particionado, shuffle y skew

El particionado determina como se reparte el trabajo. El shuffle redistribuye datos. El skew rompe el paralelismo.

Particiones

python
df.rdd.getNumPartitions()

Mas particiones no siempre es mejor. Demasiadas generan overhead; pocas reducen paralelismo.

Shuffle partitions

python
spark.conf.set("spark.sql.shuffle.partitions", "200")

Ajusta segun tamaño de datos y cluster.

Skew

Detecta claves dominantes:

python
df.groupBy("customer_id").count().orderBy(F.desc("count")).show()

Tecnicas contra skew

  • Broadcast join si una tabla es pequeña.
  • Salting de claves.
  • Filtrar datos antes del join.
  • Separar claves gigantes y tratarlas aparte.

Buenas practicas

  • Mide distribución de claves.
  • Observa tasks lentas.
  • Ajusta shuffle partitions.
  • Evita particionar por columnas de baja cardinalidad sin analizar.
  • Controla tamaño de archivos de salida.