Saltar al contenido

Tuning Spark

Menú

Puedes leer sin crear un espacio. Créalo solo cuando quieras guardar.

Guardar progreso

Lección 3 de 5

Broadcast y sort merge join

Comprende qué puede reoptimizar Adaptive Query Execution en tiempo de ejecución y qué decisiones siguen dependiendo del diseño del ingeniero.

17 min aprox.

Detalles

Tuning avanzado de Spark

Optimiza con evidencia del plan y las métricas, no con recetas globales ni más cómputo por defecto.

Reto observable

Optimiza un workload sesgado con una hipótesis medible y presenta plan, shuffle, spill, duración y corrección antes y después.

Al terminar podrás
  • Diagnosticar skew y spill
  • Ajustar joins y particiones
  • Evaluar UDF, Pandas UDF y funciones nativas
Prerrequisitos
m12
Última revisión
25 ago 2026
Nivel
Professional
Ruta relacionada
performance
Dominios blueprint
Cost & Performance Optimisation · Spark UI
Estado
Revisión editorial interna
Fuentes principales
Adaptive query execution · Diagnose cost and performance issues using the Spark UI
Reportar un error
03
Operación

Broadcast y sort merge join

Comprende qué puede reoptimizar Adaptive Query Execution en tiempo de ejecución y qué decisiones siguen dependiendo del diseño del ingeniero.

AQE usa estadísticas disponibles después de exchanges para cambiar una estrategia sort-merge a broadcast hash, combinar particiones post-shuffle demasiado pequeñas, dividir particiones sesgadas y propagar relaciones vacías. En Databricks está habilitado por defecto para consultas batch compatibles con exchanges o subconsultas. El plan adaptativo final puede diferir del plan inicial mostrado antes de ejecutar.

AQE no reordena dinámicamente todos los joins ni arregla un modelo de datos deficiente. Una relación que parece pequeña en catálogo puede superar el límite real, y determinados tipos de join no admiten broadcast en uno de sus lados. Usa `explain('formatted')`, el plan final de Spark UI y métricas de ejecución para demostrar qué regla se aplicó; evita copiar configuraciones antiguas que anulen los defaults optimizados.

PySparkInspeccionar configuración y plan adaptativo
print(spark.conf.get("spark.sql.adaptive.enabled"))

result = (
    facts.join(dimensions, "product_id")
    .groupBy("category")
    .count()
)

result.explain("formatted")
result.count()  # materializa el plan para revisarlo en Spark UI

La acción materializa la consulta; revisa después el plan final y no deduzcas la estrategia sólo del plan inicial.

¿Qué ventaja tiene un broadcast planeado estáticamente frente a uno elegido tarde por AQE?

Profundiza

Catalyst prepara una ruta con estimaciones; AQE actúa como un navegador que recalcula cuando ya conoce el tráfico real después de ciertos cruces. Esos cruces son query stages separados por exchanges o subconsultas. Al materializarse una etapa, Spark obtiene tamaños y distribuciones más fiables que las estadísticas previas y puede cambiar algunas decisiones físicas sin alterar la consulta lógica. AQE no es un optimizador omnisciente: no corrige semántica, no rediseña el modelo ni reordena libremente toda cadena de joins. Su valor está en adaptar particiones post-shuffle, tratar skew, propagar relaciones vacías y, cuando procede, sustituir un sort-merge por broadcast con evidencia runtime.

Query stage

Fragmento del plan adaptativo delimitado por exchanges cuya salida puede materializar estadísticas runtime.

AQE toma nuevas decisiones con información precisa al terminar cada etapa materializable.
Post-shuffle coalescing

Combinación dinámica de particiones pequeñas producidas por un shuffle.

Reduce overhead de tareas diminutas sin imponer un número estático adecuado para todos los volúmenes.
Plan final adaptativo

Plan físico efectivo después de aplicar o descartar reglas AQE durante la ejecución.

Es la evidencia para saber qué estrategia se usó; el plan inicial no basta.
Resumen

Puntos clave

  • AQE decide con estadísticas posteriores al shuffle, más precisas que muchas estimaciones previas.
  • Puede coalescer particiones y tratar skew sin alterar el resultado lógico.
  • No sustituye el orden lógico de joins ni una buena reducción temprana de datos.

Evita

  • Suponer que AQE reordena automáticamente una cadena de joins mal diseñada.
  • Desactivar AQE para reproducir una configuración heredada sin comparar resultados y métricas.

Vista de lectura · sin ejecución

Learn Databricks

Learn Databricks · commit 08c378c

README.md

Módulo 23

Contenido del módulo