Я новичок в Hadoop и смущен параметрами Mapper.
Возьмите известный WordCount как образец:
class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
private Text outputKey;
private IntWritable outputVal;
@Override
public void setup(Context context) {
outputKey = new Text();
outputVal = new IntWritable(1);
}
@Override
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer stk = new StringTokenizer(value.toString());
while(stk.hasMoreTokens()) {
outputKey.set(stk.nextToken());
context.write(outputKey, outputVal);
}
}
}
См. Функцию map
, параметры - это Object key
, " Text value
и Context context
Я смущен тем, что выглядит Object key
(вы видите, key
никогда не используется в функции " Map
).
Поскольку формат входного файла выглядит так:
Deer
Beer
Bear
Beer
Deer
Deer
Bear
...
Я знаю, что ценность выглядит как каждая строка Deer
, Beer
и т.д. Они обрабатываются по строкам.
Но как выглядит ключ? Как решить, какой ключ типа данных должен использовать?
Все здесь зависит от вашего InputFormat
класса InputFormat
. Он анализирует исходный источник данных и предоставляет вам пары (ключ, значение). Различные реализации формата ввода могут предоставить вам разные потоки, даже имеющие один и тот же источник ввода.
Вот статья, демонстрирующая подход:
Главный драйвер здесь - RecordReader
.