Spark

Leer un plan de ejecución: las 4 señales a buscar

explain(mode='formatted') y los marcadores que importan: Exchange (shuffle), tipo de join, PushedFilters y PartitionFilters.

Requisitos

PySpark 3.x

Python
q = (
    spark.read.parquet("s3a://lake/silver/events")
    .filter("event_date = '2026-06-01' AND status = 'paid'")
    .join(ref, "product_id")
)
q.explain(mode="formatted")

# À vérifier dans la sortie :
# 1. PartitionFilters: [event_date = 2026-06-01]
#    -> le pruning de partition fonctionne (sinon : filtre non poussé,
#       cast implicite ou fonction sur la colonne de partition ?)
# 2. PushedFilters: [IsNotNull(status), EqualTo(status,paid)]
#    -> predicate pushdown vers Parquet OK
# 3. BroadcastHashJoin vs SortMergeJoin -> la petite table est-elle diffusée ?
# 4. Nombre d'Exchange -> chaque occurrence est un shuffle complet.

Resultado

(1) Scan parquet lake.silver.events
    Output [5]: [event_id#0, product_id#3, status#4, amount#5, event_date#7]
    PartitionFilters: [isnotnull(event_date#7), (event_date#7 = 2026-06-01)]
    PushedFilters: [IsNotNull(status), EqualTo(status,paid)]
(4) BroadcastExchange
(5) BroadcastHashJoin [product_id#3], [product_id#12], Inner, BuildRight

Exchange : 1 seul (le broadcast) -> aucun shuffle des events ; 18 Go lus sur 2 To.
PySparkexplainCatalystDiagnostic

Snippets relacionados

Volver al Data Lab