Как сделать объединение двух наборов записей, используя Map Reduce? Большинство решений, в том числе опубликованных на SO, предлагают мне испускать записи на основе общего ключа, а в редукторе добавить их, чтобы сказать HashMap, а затем взять крест продукта. (например, Join of two datasets in Mapreduce/Hadoop)Операция объединения с использованием Hadoop MapReduce
Это решение очень хорошее и работает для большинства случаев, но в моем случае моя проблема совсем другая. Я имею дело с данными, у которых есть миллиарды записей, и перекрестное произведение двух наборов невозможно, потому что во многих случаях хэш-карта будет иметь несколько миллионов объектов. Поэтому я столкнулся с ошибкой пространства кучи.
Мне нужно гораздо более эффективное решение. Весь смысл MR заключается в том, чтобы иметь дело с очень большим количеством данных, которые я хочу знать, если есть какое-либо решение, которое может помочь мне избежать этой проблемы.
Вы делаете что-то неправильно. Этот ответ на самом деле дает вам единственный способ сделать присоединение к MR (за исключением соединения в памяти с помощью распределенного кеша и некоторого другого колдовства), если у вас закончится куча, вы, очевидно, сохраняете слишком много материала в памяти или ваш размер кучи слишком мал, попробуйте поднять его с помощью -XmxSIZE. Каждый * ряд * ваших данных содержит миллиарды записей? – TC1
Если вы прочтете этот ответ, автор предложит сохранить в памяти два списка. В моем случае этот список безумно велик не из-за размера каждой записи, а из-за количества элементов в списке, которые наверняка превышают миллионы, если не миллиарды. –