Как мне выразить эффективные СОЕДИНЕНИЯ, смешав SHUFFLE и COMBINE? - PullRequest
0 голосов
/ 28 сентября 2018

Заранее прошу прощения за долгое чтение.Мы ценим ваше терпение.

У меня есть два числа A и B, а класс reducer.

A содержит два столбца (key, a_value).Клавиша A - ключ в столбце key не встречается более одного раза.

B имеет два столбца (key, b_value) - но без ключа, поле ключа может повторяться несколько раз.И некоторые клавиши могут быть сильно искажены - давайте назовем их горячие клавиши .

Редуктор построен с использованием a_value и может потреблять b_values соответствующего ключа в любой заказ .Наконец, редуктор может выдавать c_value, который представляет сокращение.

Пример использования редуктора выглядит следующим образом (псевдокод):

reducer = construct_reducer(a_value)
for b_value in b_values:
    reducer.consume(b_value)
c_value = reducer.result()

Я хочу использовать таблицыA и B для создания таблиц C, содержащих два столбца (key, c_value).

Это можно сделать тривиально, вызвав

  1. reduceByKey на B для создания rdd с двумя столбцами key, list[b_values]
  2. соединение с A на ключе
  3. Выполните блок кода выше, чтобы создать таблицу со столбцами key, c_value

Проблема при таком подходе заключается в том, что горячие клавиши в B вызывают reduceByKey для OOM даже при очень высокой памяти исполнителя.

В идеале я хотел бы присоединиться и сразу же reducer.consume b_value с B в A - редуктор построен из a_value с.,Еще один способ думать об этом - использовать aggregateByKey, но с другими zeroValues, полученными из другого rdd.

Как мне это выразить?(Я посмотрел на cogroup и aggregateByKey без какой-либо удачи)

Спасибо за чтение!

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