Spark: группировка по ключу, сопоставление раздела - PullRequest
0 голосов
/ 29 августа 2018

Я использую искру 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:

Размышляя об этом, я пришел к выводу, что если вещи сгруппированы в каждом разделе, то это нормально, но, по крайней мере, я хотел бы иметь «большие группы» на раздел вместо того, чтобы моя группа распределялась по разделам. что у меня есть.

В некотором смысле, я говорю, что хотел бы, чтобы как можно больше элементов группы располагалось в одном разделе.

Затем я могу отобразить группу обработки разделов по группам, возможно, группируя их по группам, учитывая характер операции, которую мне нужно сделать.

Таким образом, ослабляя ограничения, возникает вопрос, как я могу установить искру таким образом, чтобы записи одной и той же группы, то есть имеющие один и тот же ключ, были как можно больше размещены в одном разделе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...