내가 예를 들어 자연 순서로 정렬에 내 감속기변경 감속기 정렬 순서
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);
}
}
참고 내 매퍼 출력은 감속기와 동일한 형식이지만 감속기는 최대 값을 출력 중입니다.
무엇이 없습니까?
이제는 올바른 순서로 정렬되지만 동일한 정수로 시작하는 다른 키는 삭제됩니다. 예 : 1 1998-01-05 45, 1 1998-01-05 46; 그것은 첫 번째를 버리고 두 번째를 유지합니다. 무슨 일이 일어날 지 아십니까? – fanbondi
SortedMap 또는 SortedSet을 사용하는 경우 중복을 무시합니다. 해결 방법은 List를 사용하고 Collections.sort()로 정렬하는 것입니다. –