Я хочу переразбить мой фрейм данных Spark на основе столбца X. Скажем, столбец X имеет 3 различных значения (X1, X2, X3). Количество различных значений может быть разным.
Я хочу, чтобы один раздел содержал записи только с одним значением X. ie. Мне нужны 3 раздела, в 1 из которых есть записи, где X = X1, другие с X = X2 и последние с X = X3.
У меня есть уникальные значения X из фрейма данных по запросу
val uniqueList = DF.select("X").distinct().map(x => x(0).toString).collect()
который дает список уникальных значений правильно.
И для повторного разбиения я делаю
DF = DF.repartition(uniqueList.length, col('X'))
Однако мои разделы в DF не появляются, как ожидалось. Данные распределяются неправильно, так как один раздел пуст, второй содержит записи с X1, а третий раздел содержит записи с X2 и X3.
Может ли кто-нибудь помочь, если мне что-то не хватает.
EDIT :
Мой столбец X может иметь различное количество уникальных значений. Он может иметь 3 или 3000 уникальных значений. Если я сделаю ниже
DF = DF.repartition(col('X'))
, я получу только 200 разделов, так как это значение по умолчанию для spark. sql .shuffle.partitions. Таким образом, я даю номер раздела
Если есть 3000 уникальных значений X, тогда я хочу переразбить мой DF таким образом, чтобы было 3000 разделов, и каждый раздел содержал записи для одного конкретного значения X. Итак что я могу запустить mapPartition и обрабатывать каждый раздел параллельно.