Каково использование «ключа K1» в org.apache.hadoop.mapred.Mapper?
Вопрос
Я изучаю Apache Hadoop и рассматривал пример WordCount. org.apache.hadoop.examples.WordCount.Я понимаю этот пример, однако вижу, что переменная Длинный записываемый ключ не использовался в
(...)
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
String line = value.toString();
StringTokenizer itr = new StringTokenizer(line);
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
output.collect(word, one);
}
}
(...)
какое использование этой переменной?Может ли кто-нибудь дать мне простой пример, где он будет использоваться?Спасибо
Решение
Если InputFormat имеет значение TextInputFormat, ключ — это смещение в байтах от начала текущего входного файла.
Значение — это просто строка текста с этим смещением.
Если бы использовался SequenceFileInputFormat, ключом было бы то, что было вставлено в позицию ключа записи.То же самое и со значением.
Суть в том, что типы ключей/значений зависят от типа ввода (текст, файл последовательности и т. д.).
по часовой стрелке
Другие советы
Я могу ошибаться (я читал учебники по карте/сокращению, но еще не использовал их в реальных проектах), но я думаю, что в целом это идентификатор входной записи;например, кортеж (имя файла, номер строки).В данном конкретном случае это предположительно номер строки, и он не имеет значения для подсчета слов.Его можно было бы использовать, если бы идея заключалась, скажем, в агрегировании количества слов по строкам, а не по файлам (или для нескольких файлов, если ключ действительно содержал эту информацию).