Технически говоря, Hadoop MapReduce рассматривает все как пары ключ-значение; вам просто нужно определить, какие ключи и какие значения. Подписи карты и уменьшения
map: (K1 x V1) -> (K2 x V2) list
reduce: (K2 x V2) list -> (K3 x V3) list
с сортировкой по значениям K2 в промежуточной фазе тасования между картой и уменьшением.
Если ваши входные данные имеют форму
Student x (College x GPA)
Тогда ваш маппер не должен делать ничего, кроме как передать значения College для ключа:
map: (s, c, g) -> [(c, s, g)]
с колледжем в качестве нового ключа, Hadoop будет сортировать по колледжу для вас. Тогда ваш редуктор - просто старый «редуктор идентификации».
Если на практике вы выполняете операцию сортировки (то есть это не домашняя работа), проверьте Улей или Свинья . Эти системы значительно упрощают такие задачи. Сортировка по определенному столбцу становится довольно тривиальной. Тем не менее, всегда полезно написать, скажем, потоковое задание hadoop для задач, подобных той, что вы определили здесь, чтобы лучше понять мапперы и редукторы.