Я просто смущен, что все встроенные записи, такие как IntWritable, FloatWritable, GenericWritable и т. Д., Используют исходный компаратор для сравнения по умолчанию? Если нет, как мы должны регистрировать их для использования rawcomparator.Использует ли все встроенные записи возможность использовать стандартный компаратор по умолчанию?
ответ
Как получить RawComparator
в JobConf.getOutputKeyComparator:
public RawComparator getOutputKeyComparator() {
Class<? extends RawComparator> theClass = getClass("mapred.output.key.comparator.class",
null, RawComparator.class);
if (theClass != null)
return ReflectionUtils.newInstance(theClass, this);
return WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class));
}
Hadoop будет пытаться получить имя RawComparator
класса из mapred.output.key.comparator.class
. Если он не установлен, hasoop попытается преобразовать класс ключа в WritableComparable
и использовать его для создания WritableComparator
. Поэтому, если мы не настроим нашего клиента RawComparator
, введите WritableComparator.get.
public static synchronized
WritableComparator get(Class<? extends WritableComparable> c) {
WritableComparator comparator = comparators.get(c);
if (comparator == null) {
// force the static initializers to run
forceInit(c);
// look to see if it is defined now
comparator = comparators.get(c);
// if not, use the generic one
if (comparator == null) {
comparator = new WritableComparator(c, true);
}
}
return comparator;
}
В WritableComparator.get
, он будет искать WritableComparator
в карте comparators
сначала.
Большинство встроенных в Writable
с, таких как IntWritable, когда они загружены, они будут ссылаться на define
поставить их WritableComparator
(например, org.apache.hadoop.io.IntWritable.Comparator
) к comparators
. Так что если вы хотите зарегистрировать свой пользовательский RawComparator
, вы можете использовать коды, такие как (Вы должны убедиться, что эти коды в вашем теле класса Writable
):
static { // register this comparator
WritableComparator.define(IntWritable.class, new Comparator());
}
Далее, что произойдет, если WritableComparable
не регистрирует WritableComparator
? Это поведение по умолчанию WritableComparator. Он будет ссылаться на WritableComparable.compareTo
, чтобы сравнить два ключа.
- 1. C++/STL Компаратор по умолчанию
- 2. Есть ли стандартный конструктор по умолчанию?
- 3. Должен ли std :: reference_wrapper содержать компаратор сравнения «<» по умолчанию?
- 4. Как использовать компаратор по умолчанию в своем классе?
- 5. Использует ли ASP.NET по умолчанию многоядерный процессор?
- 6. Использует ли Laravel готовые заявления по умолчанию?
- 7. Как работает компаратор по умолчанию на C#?
- 8. Использует ли SQL azure NOEXPAND по умолчанию?
- 9. Использует ли __NR_socketcall случайный порт по умолчанию?
- 10. Есть ли возможность переопределить запросы по умолчанию для вставки/обновления/удаления по умолчанию для EF
- 11. Использует ли Core Data Threading по умолчанию?
- 12. Использует ли Grails Spring Injection по умолчанию
- 13. По умолчанию AuthComponent использует FormAuthenticate
- 14. Как статический метод использует компаратор?
- 15. Аннотация реализация IEqualityComparer или переопределить компаратор по умолчанию использовать Distinct метод
- 16. Является ли стандартный конструктор по умолчанию инициализацией переменных равными нулю?
- 17. Есть ли возможность установить программную клавиатуру по умолчанию программно?
- 18. Использует ли .Net 4 встроенные методы MarshalByRefObject?
- 19. PDFTK - и возможность изменять вид по умолчанию
- 20. Записи отображаются по умолчанию
- 21. C стандартный запрет на предупреждения по умолчанию
- 22. Предоставляет ли стандартный SQL возможность группировки выражений объединения?
- 23. фильтрация данных по GridView-хочу показать ВСЕ записи по умолчанию
- 24. Есть ли стандартный ресурс для «действия по умолчанию» элементов HTML?
- 25. UICollectionViewFlowLayout не использует встроенные фреймы
- 26. Нуль-безопасное сопоставление Компаратор с использованием реализаций по умолчанию
- 27. Как изменить стандартный цвет по умолчанию LinkBar
- 28. Как отключить стандартный экран по умолчанию программно?
- 29. Стандартный UIButton isAccessibilityElement возвращает NO по умолчанию
- 30. Стандартный размер шрифта по умолчанию em?