2014-12-31 3 views
0

У меня есть код уменьшения кода, в mapper я делаю некоторые вычисления, тогда как в редукторе я применяю формулу, чтобы получить результат. Мой результат заключен в парах IntDouble как ключ и Text как значение. Мне нужно знать, как я могу сортировать результат редуктора?Hadoop - Сортировка в Reducer

Вот образец выходного редуктора. Мне нужно сортировать по ключам. Я реализовал весь код в mapper, и он отлично отсортировал его, но в отличие от редуктора результат не сортируется.

[1  0.5] Mr. Nice Guy 
[1  0.0] Rush Hour 
[1  0.3] Twin Dragons 
[1  0.6] Snake in the Eagle's Shadow 
[1  0.5] Police Story 
[1  0.5] Armour of God 2: Operation Condor 
[1  0.5] Drunken Master 

Ожидаемое отсортированный список:

[1  0.0] Rush Hour 
    [1  0.3] Twin Dragons 
    [1  0.5] Mr. Nice Guy 
    [1  0.5] Police Story 
    [1  0.5] Armour of God 2: Operation Condor 
    [1  0.5] Drunken Master 
    [1  0.6] Snake in the Eagle's Shadow 

ответ

0

Как вы хотите, ключи сортируются?
Я бы определил объект IntDoublePair, сравните его, реализуйте любую логику сравнения, которая меня устраивает, а затем в редукторе я бы создавал экземпляр List<IntDoublePair> myList и, итерируя значения каждого ключа, я бы добавил их в .finaly сортировать список.
Вы также можете выполнить поиск по «вторичной сортировке mapreduce» ... возможно, это подойдет вашей цели

+0

После присвоения результата в ArrayList , должен ли я сделать метод для сортировки списка? потому что метод Collections.sort по умолчанию, похоже, не работает для такого рода строк. – user1584253

+0

после того, как вы определите IntDoublePair реализует Comparable Collections.sort будет применяться для вашего объекта и сортирует ваш список. вот отличный учебник: http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/ – belostoky

+0

, когда я снова думаю об этом, это не поможет вам ... потому что редуктор уже выполняет итерации по значениям одного и того же ключа ... извините:/ – belostoky

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