2016-02-23 2 views
0

Мне нужно присоединиться к двум большим RDD и потенциально дважды. Любая помощь приветствуется для разработки этих объединений.Как создать это искровое соединение

  • Вот проблема,

  • Первый РДД является productIdA, productIdB, similarity и размер около 100G.

  • Второй RDD - customerId, productId, boughtPrice и размер около 35G.

  • Результат RDD Я хочу productIdA, productIdB, similarity, customerIds bought both product A and B.

  • Потому что я не могу транслировать либо из РДА, так как они довольно большие, мой дизайн агрегировать второй RDD по product id затем присоединиться к первому RDD twice но я получаю огромный разлив в случайном порядке и все виды ошибок (ООМ или из космоса из-за перетасовки). Отложите ошибки в сторону, я хотел бы знать, есть ли лучший способ добиться того же результата. Спасибо

+0

Как рассчитывается «подобие»? – zero323

+0

Что именно вы хотите получить? Какие критерии поиска у вас есть? План объединения зависит от того, что вы ищете и сколько результатов вы хотите получить. Иногда более продуктивно иметь временную таблицу и так далее. Дайте нам много подробностей. Это одноразовый запрос или обычный? Огромные запросы данных очень специфичны. Помогите нам как можно больше. – Mita

+0

@ zero323 Сходство рассчитывается другим компонентом с использованием функций продукта, таких как цена, вендинг и т. Д. –

ответ

1

У вас есть строка для каждого сопряжения продуктов в первом RDD?

Если вы сделаете (или это близко), то вы можете сделать что-то вроде группы второго RDD на customerId, создать элемент для каждого спаривания, затем изменить и сгруппировать этот RDD путем сопряжения, затем сгруппировать, чтобы получить список от customerId s, затем присоединитесь, чтобы добавить в similarity.

(ли это приведет к более или менее математике зависит, я думаю, о распределении количества продуктов, купленных на клиента.)

Как комментарий zero323 также подразумевает, как только вы жеребьевку из группировки на customerId, было бы дешевле пересчитать similarity, чем присоединиться к огромному набору данных.

+1

Я бы добавил, что если у вас уже есть фактические пары, вы можете сначала фильтровать RDD примерно на O (N), чтобы сделать возможное соединение значительно дешевле. – zero323

+0

Спасибо Matt, Zero323. Как и комментарий, который я только что добавил, оценка sim вычисляется другим компонентом, здесь я использую транзакции клиентов, чтобы применить весовые коэффициенты на этих баллах. –

+0

Я попрошу ваш метод. –

Смежные вопросы