Как объединить два набора данных по их общему ключу в Hadoop?

У меня есть два набора данных Customer и Goods. Набор данных Customer имеет идентификатор клиента в качестве ключа и список идентификаторов товаров, которые клиент купил в качестве значения. Наборы данных о товарах имеют товар в качестве ключа и цену в качестве ценности. Как объединить эти два набора данных в соответствии с идентификатором товара внешнего ключа?

customer dataset:
customer id, goods id1,goods id2, ...

goods dataset
goods id1, price1
goods id2, price2

The join result dataset I want:
customer id1,price1,price2,...
customer id2,pric3e,price4,...

Я новичок в Hadoop. Я знаю, что это можно сделать в Pig и Hive, но я хочу реализовать это в Java с помощью Hadoop. Кто-нибудь может мне помочь? Большое спасибо!


person Treper    schedule 23.07.2012    source источник


Ответы (3)


См. раздел Relational Joins в документе Обработка текста с интенсивным использованием данных с помощью MapReduce.

person Praveen Sripati    schedule 23.07.2012

Может быть, я могу добавить к ответу Пола. Здесь вы можете использовать концепцию распределенного кеша. Загрузите меньший из ваших файлов, который, я думаю, является набором данных о товарах в вашем случае, в распределенный кэш. (Распределенный кэш по умолчанию может хранить до 10 ГБ данных). Затем вы можете использовать карту нормалей для чтения набора данных о клиентах и выполнить соединение, используя соответствующие данные из распределенного кэша.

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

http://bigdatapartnership.com/map-side-and-reduce-side-joins/ может предоставить вам информацию о присоединении в приложениях MapReduce.

Hadoop: полное руководство Тома Уайта приводит пример программы на боковом объединении карты, сокращении бокового соединения и объединении с распределенным кэшем.

В главе 5 книги Чака Лама Hadoop In Action также обсуждаются соединения.

person Arun A K    schedule 23.07.2012
comment
Если оба ваших файла большие, можно проверить, поможет ли эта страница вам с расширением . stackoverflow.com/questions/6323544/ - person Arun A K; 24.07.2012

насколько велик набор данных "Товары"? Если он достаточно мал, проще всего загрузить его в память ваших картографов (в хэш-карте), а затем сделать набор данных «Клиенты» входными данными для вашей работы. Затем вы можете запустить свою работу и искать «Товары», когда вы повторяете свой ввод. Вы можете использовать распределенный кеш для распределения ваших данных «Товары» на каждый узел в кластере.

person Paul M    schedule 23.07.2012