Программа Mapreduce для подсчета количества слов с указанием c букв - PullRequest
0 голосов
/ 18 марта 2020

Я новичок в 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 и словом с самой длинной длиной.

Я не уверен, правильный ли мой подход, просьба помочь решить его

...