Поскольку 200 - это стандартное значение spark.sql.shuffle.partitions
, которое применяется к df.repartition
. Из документов:
Возвращает новый набор данных, разделенный данными выражениями разделения, используя spark. sql .shuffle.partitions в качестве числа разделов. Результирующий набор данных имеет разделение ha sh.
Количество разделов равно НЕ СВЯЗАНО с количеством (различных) значений в вашем кадре данных. Перераспределение гарантирует, что все записи с одним и тем же ключом находятся в одном разделе, и ничего больше. Таким образом, в вашем случае может оказаться, что все записи находятся в 1 разделе, а 199 разделов пусты
Даже если вы сделаете codes.repartition($"item_code",5)
, нет гарантии, что у вас есть 5 разделов одинакового размера. AFAIK, вы не можете сделать это в API Dataframe, возможно, в RDD с пользовательским разделителем