Вот логика подсказывает, что вроде как это было бы ожидаемым поведением, но практика выглядит так, как будто поначалу групбай, независимо от агрегатной функции, делает шафл партишн исходя из spark.sql.shuffle.partition. А вот окно, например, реализованное уже через partitionBy, раскидывает исходя из количества уникальных ключей, и это может оказаться быстрее. Вообще, хз, надо опять, похоже, лезть в исходники и освежить знания по механизмам шаффла.