У меня есть журнал значений меток времени (одновременных пользователей) разных «зон» веб-приложения чата в формате «Метка времени; Зона; Значение».Для каждой зоны существует одно значение в минуту каждого дня.
Для каждой зоны я хочу перечислить максимальное значение за день, упорядоченное по этому максимальному значению
Итак, входной файл
#timestamp; zone; value
2011-01-01 00:00:00; 1; 10
2011-01-01 00:00:00; 2; 22
2011-01-01 00:01:00; 1; 11
2011-01-01 00:01:00; 2; 21
2011-01-02 00:00:00; 1; 12
2011-01-02 00:00:00; 2; 20
должен производить для зоны 1:
2011-01-02 12
2011-01-01 11
и для зоны 2:
2011-01-01 22
2011-01-02 20
Как бы я подошел к этому?ИМХО, мне понадобится более одного шага M / R.
До сих пор я реализовал:
- Картограф, который собирает текстовую клавишу "YYYY-MM-DD /Zone "и значение IntWritable" value "и
- Редуктор, который определяет максимальное значение для ключа (т. Е. Для каждой зоны в день).
В результате получается файл типа
2011-01-01/1 11
2011-01-01/2 22
2011-01-02/1 12
2011-01-02/2 20
Будет ли это вход для второго шага M / R?Если так, что я бы взял за ключ и значение?
Я изучил пример «Вторичная сортировка» в «Hadoop - Полное руководство», но я не уверен, применять ли это здесь и как.
Можно ли выполнить M / R в несколько выходных файлов (по одному на зону)?
ОБНОВЛЕНИЕ Подумав об этом, я попробую следующее:
- сделать ключ составным из идентификатора зоны и значения (используя IntPair?)
- написание пользовательского KeyComparator и GroupComparator