2015-10-28 3 views
3

Я пишу программу mapreduce, которая имеет 2 картографа и 1 редуктор, я внедрил пользовательские типы данных для каждого картографа. Тип данных является более или менее просто контейнером, где поля являются значениями Text/Intwritable.Как вы обрабатываете различные типы значений в редукторе

Так Mapper 1 выводит идентификатор (Текст), M1Writable (моя запись с 3 полями)

Mapper 2 выходов идентификатор (Текст), M2Writable (моя запись с 2 полями)

Редуктор получит итерируемые значения

Как это будет работать, поскольку два типа записи могут быть разными?

Как определить, из какого картографа он появился?

Спасибо Я знаю, что это основной вопрос, но у меня возникли проблемы с поиском ответа.

+0

Зачем думать о мультиформаторе? Почему бы просто не использовать один картограф и переместить логику вывода на карту. Короче говоря, выходная логика находится в одном преобразователе, преобразователь может выводить ожидаемые выходы по мере необходимости. – luoluo

+0

Вы пытаетесь добиться сокращения бокового соединения с двумя наборами данных? – Ramzy

+0

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

ответ

2

Mappers in MapReduce всегда выводятся аналогичным образом.

Если M1Writable и M2Writable имеют общий родительский класс (например, MWritable), который является общим типом вывода всех картографов, вы не можете выводить различные типы среди ваших картографов.

Чтобы узнать, из какого результата отобразился вывод, вам необходимо записать информацию в свои пользовательские объекты MWritable.

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