Как узнать количество разделов в наборе данных? - PullRequest
0 голосов
/ 27 февраля 2020

Я знаю, что есть много вопросов по одному и тому же вопросу, но никто не отвечает на мой вопрос.

У меня есть данные сценария.

   val data_codes = Seq("con_dist_1","con_dist_2","con_dist_3","con_dist_4","con_dist_5")
    val codes = data_codes.toDF("item_code")
    val partitioned_codes = codes.repartition($"item_code")
    println( "getNumPartitions : " + partitioned_codes.rdd.getNumPartitions);

Вывод:

getNumPartitions : 200

Предполагается, чтобы дать 5 правильно, почему он дает 200? где я делаю не так и как это исправить?

1 Ответ

2 голосов
/ 27 февраля 2020

Поскольку 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 с пользовательским разделителем

...