Я новичок в oop. У меня есть вопрос, чтобы посчитать количество слов с указанным c количеством букв в этих файлах - например, количество слов с 4 буквами, 5 букв и так далее. Если одно слово повторяется в тексте 20 раз, считайте его по отдельности 20 раз. Я попробовал следующее:
Класс Mapper
public static class Map extends Mapper<LongWritable, Text, IntWritable, IntWritable> {
final static IntWritable one = new IntWritable(1);
IntWritable wordLength = new IntWritable();
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException
{
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
wordLength.set(tokenizer.nextToken().length());
context.write(wordLength, one);
}
}
}
Класс редуктора
public class Reduce extends Reducer<IntWritable, IntWritable, Text, IntWritable>{
IntWritable tin = new IntWritable();
IntWritable smal = new IntWritable();
IntWritable bi = new IntWritable();
int t, s, b;
Text tiny = new Text("tiny");
Text small = new Text("small");
Text big = new Text("big");
@Override
public void reduce(IntWritable key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{
for (IntWritable val:values){
if(key.get() == 4){
t += val.get();
}
else if(key.get()== 10){
s += val.get();
}
else if(10<=key.get()){
b += val.get();
}
}
tin.set(t);
smal.set(s);
bi.set(b);
context.write(tiny, tin);
context.write(small, smal);
context.write(big, bi);
}
}
При работе в терминале я получаю следующую ошибку: Ошибка: java. io.IOException: Несовпадение типов в ключе с карты: ожидаемая организация. apache .had oop .io.Text, полученная организация. apache .had oop .io.IntWritable
Что я Я пытаюсь сделать, это сделать карту пары ключ-значение, как и уменьшить его. так что я получаю вывод для слов с длиной 10,4 и словом с самой длинной длиной.
Я не уверен, правильный ли мой подход, просьба помочь решить его