Java Mapreduce - получение имен файлов с совпадениями и печать в выходной файл - PullRequest
0 голосов
/ 28 июня 2019

Привет Я пытался придумать модифицированную версию стандарта WordCount v1.0 при этом я читаю все файлы из входного каталога (args [0]) и печатаю вывод в выходной каталог (args [ 1 ]), который состоит не только из слов и количества вхождений, но список файлов, где произошли совпадения.

Так, например, у меня есть 2 текстовых файла:

//1.txt
I love hadoop
and big data

//2.txt
I like programming
hate big data

Вывод будет:

//Output.txt
I       2   1.txt 2.txt
love    1   1.txt
hadoop  1   1.txt
and     1   1.txt
big     2   1.txt 2.txt
data    2   1.txt 2.txt
like    1   1.txt
programming  1  2.txt
hate    1   2.txt

На данном этапе я не уверен, как извлечь имя файла, в котором произошло совпадение. Кроме того, я не уверен, как сохранить имя файла - буду ли я использовать Triple или мне нужно будет использовать вложенные карты, так что, возможно, Map (K1, Map (K2, v))? Я не знаю, что было бы возможно в программе mapreduce, поэтому любые советы будут с благодарностью.

1 Ответ

1 голос
/ 28 июня 2019

Получение имен файлов обычно не рекомендуется.Разные форматы ввода имеют разные способы сделать это, и некоторые из них могут вообще не обеспечивать такую ​​функциональность.

Предполагая, что вы работаете с простым TextInputFormat, вы можете использовать контекст mapper для получения разделения:

FileSplit split = (FileSplit)context.getInputSplit();
String filename = split.getPath().getName();

Чтобы получить желаемый формат, позвольте mapper выдавать кортежи <Text(word),Text(filename)>.Редуктор должен собрать их в Map<String(word), Set<String>(filename)>.Это предполагает, что объединитель не используется.

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