Я использую искру 2.3.1.
Я пытаюсь решить следующую проблему. У меня есть данные, которые приходят как пара (ключ, данные). Однако из-за характера того, что мне нужно сделать с данными, мне нужно запустить раздел карты. Это потому, что мне нужно создать экземпляр объекта, который нельзя сериализовать, в каждом разделе, чтобы выполнить преобразование, которое мне нужно сделать.
По соображениям производительности я хотел бы, чтобы каждый раздел содержал Данные только для определенного ключа.
В каком-то смысле я хочу GroupByKey и отобразить эту группу? Однако отображение по группе не равно отображению по разделу. Судя по опыту, несколько групп могут находиться в одном разделе.
Запуск следующего кода показывает это.
partioneddf.rdd.groupBy(r => r(2).asInstanceOf[Long]).foreachPartition { it => {
while (it.hasNext) {
println(it.next._2.toString)
};
println("\n===\n") }}
Это дает мне результаты, которые выглядят так
===
CompactBuffer ([США, Куба, 478]) CompactBuffer ([французский
Полинезия, США, 43], [США, Мартиника, 43],
[Уругвай, США, 43]) CompactBuffer ([США
Штаты, Гватемала, 318]) CompactBuffer ([Люксембург, Соединенные Штаты, 155])
===
CompactBuffer ([Перу, Соединенные Штаты, 279]) CompactBuffer ([United
Штаты, Австрия, 63], [Соединенные Штаты, Гайана, 63])
CompactBuffer ([Ирландия, США, 335])
CompactBuffer ([Бермудские острова, США, 183]) CompactBuffer ([United
США, Мексика, 7187])
===
===
CompactBuffer ([Парагвай, США, 60])
CompactBuffer ([Франция, США, 935]) CompactBuffer ([Соединенные Штаты
Штаты, Палау, 31]) CompactBuffer ([США, Иордания, 44],
[Иордания, США, 44], [Мартиника, США, 44])
===
Что совсем не то, что я хочу. Я хотел бы, чтобы была только одна группа на раздел и отображать эту группу с помощью mapPartition.
Это вообще возможно в искре? Я проверил API и не смог прийти с методом. Может быть, я думаю, что проблема не в ту сторону.
Пожалуйста, какие-либо предложения или советы?
РЕДАКТИРОВАТЬ1:
Размышляя об этом, я пришел к выводу, что если вещи сгруппированы в каждом разделе, то это нормально, но, по крайней мере, я хотел бы иметь «большие группы» на раздел вместо того, чтобы моя группа распределялась по разделам. что у меня есть.
В некотором смысле, я говорю, что хотел бы, чтобы как можно больше элементов группы располагалось в одном разделе.
Затем я могу отобразить группу обработки разделов по группам, возможно, группируя их по группам, учитывая характер операции, которую мне нужно сделать.
Таким образом, ослабляя ограничения, возникает вопрос, как я могу установить искру таким образом, чтобы записи одной и той же группы, то есть имеющие один и тот же ключ, были как можно больше размещены в одном разделе.