Java - Hadoop MapReduce уменьшить не выполняет - PullRequest
0 голосов
/ 22 февраля 2019

Я добавляю List<String> к моей функции уменьшения.

Данные в List<String> выглядят как

"banana:1"
"apple:3"
"carrot:2"
"ballon:1"
"cake:4"
"banana:14"
"apple:3"
"carrot:22"
"ballon:11"
"cake:9"
"banana:7"
"apple:6"
"carrot:5"
"ballon:3"
"cake:2"

Я хочу, чтобы мои Reduce получили максимум #String.split(":")[0] для каждого пятого элемента и собрать соответствующее слово.Таким образом, связанные слова будут cake, carrot, banana, так как они являются самыми высокими баллами для каждого пятого элементаПри этом cake, carrot, and banana каждый получит +1.Я хочу перебрать весь свой List, чтобы увидеть, сколько + 1 имеет каждое слово.

В настоящее время я получаю ошибку ArrayIndexOutOfBounds в своем Reducer, и я не уверен, почему.

Это мое сокращение:

Text mainKeyword = new Text();

@Override
public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> outputCollector, Reporter reporter)
        throws IOException {

    List<String> copies = new ArrayList<String>();
    String keyword = key.toString().split(":")[0];
    Integer score = Integer.parseInt(key.toString().split(":")[1]);


    int total = 0;
    while (values.hasNext()) {
        String keywordAndValue = key.toString();
        total += values.next().get();
        copies.add(keywordAndValue);
    }


    int maxIndex = 1;
    int count = 0;
    for (int i = 1; i < copies.size() + 1; i++) {
        if (Integer.parseInt(copies.get(i - 1).split(":")[1]) > Integer.parseInt(copies.get(maxIndex - 1).split(":")[1])) {
            maxIndex = i;
        }
        if (i % 4 == 0) {
            mainKeyword.set(new Text(copies.get(maxIndex - 1).split(":")[0]));
            count += 1;
            maxIndex = i + 1;
        }

    }

    outputCollector.collect(new Text(score.toString()), new IntWritable(count));
}

Исключение составляет if (Integer.parseInt(copies.get(i - 1).split(":")[1]) > Integer.parseInt(copies.get(maxIndex - 1).split(":")[1])), но каждая моя строка такая, как описано: "word:# ", поэтому теоретически разделение должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...