Как получить максимальное количество слов в Hadoop? - PullRequest
0 голосов
/ 21 февраля 2019

Мне удалось запутать свою программу Word Count, и теперь я хочу получить максимальное количество экземпляров.

Мой вывод для моего WordCount выглядит следующим образом:

File1:Word1: x
File1:Word2: x

Где File представляет файл, Word представляет искомое слово, а x - количество.

Я хочуполучить максимальное количество для этих слов.Итак, перейдя к моему примеру:

File1:Word1: 4
File1:Word2: 10
File2:Word1: 4
File2:Word2: 1

Я бы хотел, чтобы Word1 из File1 и Word1 из File 2 были увеличены на 1, потому что это максимальное количество слов для слов для конкретного файла (ов).

К сожалению, мне трудно получить желаемый результат.

Моя функция карты выглядит так:

public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> outputCollector, Reporter reporter)
        throws IOException { 

    String parsedLine = value.toString();
    String[] pieces = parsedLine.split(":");
    StringTokenizer tokenizer = new StringTokenizer(pieces[1]);

    while (tokenizer.hasMoreTokens()) {
        String token = tokenizer.nextToken();
        outputCollector.collect(new Text(token), ONE);
    }
}

И мой Reduce выглядит так:

private int maximum = 0;

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

    Text occuredKey = new Text();

    int total = 0;
    while (values.hasNext()) {
        total += values.next().get();
    }

    if (total > maximum) {
        maximum = total;
        occuredKey.set(key);
    }
    outputCollector.collect(occuredKey, new IntWritable(total));
}

Я пробовал несколько вещей:

  1. Поместите ключевые слова (например, Word1, Word2 здесь) на карту, и это не сработало.

  2. Выполните итерацию по моей карте, и если слово было найдено, поместите его в список, а затем сравните размеры списка

Насколько я понимаю, это первая работавыходные данные являются входными данными для второго задания, но это не так, поскольку я не могу получить доступ к счетчику с первого задания.

Любая помощь приветствуется, я немного застрял в этом.

Для ясности в выводе:

У меня есть 60 файлов, и у каждого файла есть те же 5 слов, которые были найдены в моем Word Count.Таким образом, у меня есть 60 x 5 записей в моем выходном файле для первого задания.Второе задание займет 5 слов и посчитает, сколько раз это слово было самым высоким из набора 5 для каждого файла.Таким образом, мой вывод для этого должен быть 5 записей, и общее количество для этих 5 записей должно быть 60

...