Мне удалось запутать свою программу 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));
}
Я пробовал несколько вещей:
Поместите ключевые слова (например, Word1, Word2 здесь) на карту, и это не сработало.
Выполните итерацию по моей карте, и если слово было найдено, поместите его в список, а затем сравните размеры списка
Насколько я понимаю, это первая работавыходные данные являются входными данными для второго задания, но это не так, поскольку я не могу получить доступ к счетчику с первого задания.
Любая помощь приветствуется, я немного застрял в этом.
Для ясности в выводе:
У меня есть 60 файлов, и у каждого файла есть те же 5 слов, которые были найдены в моем Word Count.Таким образом, у меня есть 60 x 5 записей в моем выходном файле для первого задания.Второе задание займет 5 слов и посчитает, сколько раз это слово было самым высоким из набора 5 для каждого файла.Таким образом, мой вывод для этого должен быть 5 записей, и общее количество для этих 5 записей должно быть 60