Я работаю над проектом hadoop и после многих посещений различных блогов и чтения документации, я понял, что мне нужно использовать функцию вторичной сортировки, предоставляемую инфраструктурой hadoop.
Мой формат ввода имеет вид:
DESC(String) Price(Integer) and some other Text
Я хочу, чтобы значения в редукторе были в порядке убывания цены. Кроме того, при сравнении DESC у меня есть метод, который принимает две строки и Процент, и если сходство между двумя строками равно или больше, чем процент, тогда я должен считать их равными.
Проблема заключается в том, что после завершения работы по сокращению я вижу несколько DESC, которые похожи на другую строку, но все же они находятся в разных группах.
Вот мой метод compareTo для составного ключа
public int compareTo(VendorKey o) {
int result =-
result = compare(token, o.token, ":") >= percentage ? 0:1;
if (result == 0) {
return pid> o.pid ?-1: pid < o.pid ?1:0;
}
return result;
}
и сравнить метод группирования компаратора
public int compare(WritableComparable a, WritableComparable b) {
VendorKey one = (VendorKey) a;
VendorKey two = (VendorKey) b;
int result = ClusterUtil.compare(one.getToken(), two.getToken(), ":") >= one.getPercentage() ? 0 : 1;
// if (result != 0)
// return two.getToken().compareTo(one.getToken());
return result;
}