Похоже, у вас проблема с перекосом данных. Глядя на «Сводные метрики», становится ясно, что (по крайней мере) три четверти ваших разделов пусты, поэтому вы устраняете большую часть потенциального распараллеливания, которое может предоставить вам искра.
Хотя это вызовет случайное перемешивание шаг (когда данные перемещаются по сети между различными исполнителями), .repartition()
поможет сбалансировать данные по всем разделам и создать более допустимые единицы работы для распределения между доступными ядрами. Это, скорее всего, обеспечит ускорение вашего count()
.
. Как правило, вы, вероятно, захотите вызвать .repartition()
с параметром, установленным как минимум в число ядер в вашем кластере. Установка этого значения приведет к более быстрому выполнению задач (интересно наблюдать за ходом выполнения), хотя добавляет некоторые накладные расходы на управление к общему времени, которое потребуется для выполнения задания. Если задачи слишком малы (т.е. недостаточно данных на раздел), то иногда планировщик запутывается и не будет использовать весь кластер. В целом, поиск правильного количества разделов - это балансирование.