Какой ключевой класс подходит для вторичной сортировки? - PullRequest
5 голосов
/ 19 июля 2010

В Hadoop вы можете использовать механизм вторичной сортировки для сортировки значений перед их отправкой в ​​редуктор.

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

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

Какой самый умный способ сделать это. Есть ли какой-нибудь готовый класс Hadoop, который может помочь мне в этом, или мне нужно создать отдельный класс ключей для каждого шага уменьшения карты?

Как мне это сделать, если ключ на самом деле является составным, состоящим из нескольких частей (также необходимо отдельно из-за разделителя)?

Что вы, ребята, рекомендуете?

P.S. Я хотел добавить тег «вторичная сортировка», но у меня еще недостаточно представителей, чтобы сделать это.

Ответы [ 4 ]

1 голос
/ 03 февраля 2012

Я постоянно сталкивался с этой ситуацией и устал от написания пользовательских классов составных ключей. Я написал общий класс Tuple, который представляет собой список объектов и может выступать в качестве составного ключа. Список может содержать произвольное количество объектов типов примитивных оболочек Java. Он реализует WritableComparable. Источник можно посмотреть здесь

https://github.com/pranab/chombo/blob/master/src/main/java/org/chombo/util/Tuple.java

0 голосов
/ 23 июня 2014

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

0 голосов
/ 10 октября 2011

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

-Вы можете сериализовать / десериализовать свои ключи и работать с входными данными как объектами или бинами, если вы хотите строго типизированный, надежный код для вторичной сортировки ...

- для более простых сценариев, просто поставьте знак «#» между значениями!

Здесь есть отличная статья высокого уровня:

http://pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/

0 голосов
/ 07 июля 2011

Я не могу понять вопрос.У меня есть рабочая копия SecondarySort, которая печатает максимальное значение из списка значений.

https://github.com/kapild/hadoop-examples/tree/master/src/SecondarySort

...