Ну, если вы хотите ввести его в качестве параметра консоли при запуске задания, и вы, и маппер, и редуктор, находитесь в одном файле, тогда вы можете просто сделать статическую строку в этом классе:
private static String myWord;
Затем инициализируйте его методом main()
:
myWord = args[2];
И используйте это в вас map()
метод, подобный этому:
if(myWord.equals(word.toString()) {
output.collect(word, one);
}
Это будет излучать пары только от преобразователя к преобразователю, а преобразователь суммирует его. Должно работать, но я сам не проверял.
@ Редактировать: это очень странно. Единственное, что вы можете попробовать (imho), это сделать что-то похожее на этот пример WordCount 2.0 .
Как вы можете заметить (чуть ниже исходного кода), они запускают его так:
$ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount -Dwordcount.case.sensitive=true /usr/joe/wordcount/input /usr/joe/wordcount/output -skip /user/joe/wordcount/patterns.txt
Вы можете изменить это на:
$ bin/hadoop jar InvertedIndex.jar org.myorg.InvertedIndex /user/james/input /user/james/output -word hello
И измените строку, которую я предложил (myWord = args [2]), на:
for (int i=0; i < args.length; ++i) {
if ("-word".equals(args[i])) {
myWord = args[++i];
}
}
Думаю, вы можете использовать этот пример, так как он делает нечто похожее на то, чего вы хотите достичь (передать что-то в качестве параметра, а затем использовать его). Вы можете проверить, где хранятся все данные, поступающие из параметров (метод configure ()) и т. Д.