Der Standardkomparator von Hadoop vergleicht Ihre Tasten basierend auf dem Typ Writable
(genauer WritableComparable
), den Sie verwenden. Wenn Sie mit oder LongWritable
zu tun haben, dann sortiert sie numerisch.
Ich nehme an, Sie verwenden in Ihrem Beispiel daher werden Sie am Ende natürliche Sortierreihenfolge haben.
In besonderen Fällen können Sie jedoch auch einen eigenen Vergleicher schreiben.
ZB: für Testzwecke nur, hier eine kurze Probe, wie die Sortierreihenfolge von Text Schlüsseln ändern: das sich als ganze Zahlen behandeln und numerische Sortierreihenfolge erzeugen:
public class MyComparator extends WritableComparator {
public MyComparator() {
super(Text.class);
}
@Override
public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
try {
String v1 = Text.decode(b1, s1, l1);
String v2 = Text.decode(b2, s2, l2);
int v1Int = Integer.valueOf(v1.trim());
int v2Int = Integer.valueOf(v2.trim());
return (v1Int < v2Int) ? -1 : ((v1Int > v2Int) ? 1 : 0);
}
catch (IOException e) {
throw new IllegalArgumentException(e);
}
}
}
Im jobrunner Klassensatz :
Job job = new Job();
...
job.setSortComparatorClass(MyComparator.class);
Vielen Dank für das Codebeispiel – Alcott
ist ist es möglich, auch die Sortierreihenfolge zu ändern? – masu