我從減速更改減速排列順序
Key Value
1 1998-01-05 45
10 1998-01-09 20
2 1998-01-06 68
3 1998-01-07 85
4 1998-01-08 85
字典順序,這是正確的,但下面的輸出我希望它的自然順序進行排序例如
Key Value
1 1998-01-05 45
2 1998-01-06 68
3 1998-01-07 85
4 1998-01-08 85
10 1998-01-09 20
我寫了一個KeyComparator來實現這一點,下面是代碼,但即使這樣做並沒有解決。
public static class KeyComparator extends WritableComparator {
protected KeyComparator() {
super(IntWritable.class, true);
}
@SuppressWarnings("rawtypes")
public int compare(WritableComparable w1, WritableComparable w2) {
IntWritable t1 = (IntWritable) w1;
IntWritable t2 = (IntWritable) w2;
String t1Items = t1.toString();
String t2Items = t2.toString();
return t1Items.compareTo(t2Items);
}
}
注意我的映射器輸出格式與reducer相同,但reducer只是輸出最大值。
我失蹤了什麼
現在它按照正確的順序排序,但它會刪除以相同整數開頭的其他鍵。例如1 1998-01-05 45,1 1998-01-05 46;它下降第一,並保持第二。你知道什麼可能會導致這種情況嗎? – fanbondi
如果您使用SortedMap或SortedSet,這些將忽略重複項。解決方案是使用List並使用Collections.sort()進行排序。 –