Выходные данные из примера wordcount Hadoop MapReduce сортируются по ключу. Таким образом, вывод должен быть в алфавитном порядке.
С помощью Hadoop вы можете создавать свои собственные ключевые объекты, реализующие интерфейс WritableComparable
, позволяющий переопределить метод compareTo
. Это позволяет вам контролировать порядок сортировки.
Чтобы создать вывод, отсортированный по количеству вхождений, вам, вероятно, потребуется добавить еще одно задание MapReduce для обработки вывода первого, как вы сказали. Эта вторая работа была бы очень простой, возможно, даже не требующей фазы сокращения. Вам просто нужно реализовать свой собственный ключевой объект Writable
для переноса слова и его частоты. Пользовательская запись выглядит примерно так:
public class MyWritableComparable implements WritableComparable {
// Some data
private int counter;
private long timestamp;
public void write(DataOutput out) throws IOException {
out.writeInt(counter);
out.writeLong(timestamp);
}
public void readFields(DataInput in) throws IOException {
counter = in.readInt();
timestamp = in.readLong();
}
public int compareTo(MyWritableComparable w) {
int thisValue = this.value;
int thatValue = ((IntWritable)o).value;
return (thisValue < thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
}
}
Я взял этот пример из здесь .
Вы, вероятно, также должны переопределить hashCode
, equals
и toString
.