Skip to content
7 / 15

Как читать план выполнения Spark и что в нём искать

explain(mode="formatted") — основной инструмент диагностики, и читать его надо снизу вверх: внизу источники, вверху результат. Искать нужно четыре вещи. Scan parquet с полями PushedFilters и ReadSchema показывает, сколько данных реально прочитается: пустой список фильтров означает полное чтение. Exchange — это shuffle; каждый такой узел стоит дорого, и их число полезно свести к минимуму. Тип джойнаBroadcastHashJoin дёшев, SortMergeJoin требует shuffle обеих сторон, BroadcastNestedLoopJoin почти всегда катастрофа. Звёздочка перед оператором означает, что он попал в whole-stage codegen; её отсутствие — потенциальная просадка. Дополнительно mode="cost" показывает оценки размеров, а при включённом AQE финальный план виден только в Spark UI после выполнения — там появляются пометки AQEShuffleRead и заменённые операторы.

Как читать план выполнения Spark и что в нём искать | JScriptiser