Trình so sánh mặc định của Hadoop so sánh các khóa của bạn dựa trên loại Writable
(chính xác hơn WritableComparable
) mà bạn sử dụng. Nếu bạn đang xử lý IntWritable
hoặc LongWritable
thì nó sẽ sắp xếp chúng số.
Tôi giả sử bạn đang sử dụng Text
trong ví dụ của bạn do đó bạn sẽ kết thúc có thứ tự sắp xếp tự nhiên.
Trong trường hợp đặc biệt, bạn cũng có thể viết trình so sánh của riêng mình.
Ví dụ: cho mục đích thử nghiệm chỉ, đây là một ví dụ nhanh chóng làm thế nào để thay đổi thứ tự sắp xếp các phím chữ: điều này sẽ đối xử với họ như số nguyên và sẽ tạo ra số thứ tự sắp xếp:
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);
}
}
}
Trong bộ lớp jobrunner :
Job job = new Job();
...
job.setSortComparatorClass(MyComparator.class);
Nguồn
2012-11-11 16:47:41
Cảm ơn bạn rất nhiều vì ví dụ mã – Alcott
là có thể thay đổi thứ tự sắp xếp không? – masu