Я работаю над проектом 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;
}