Конкретное слово для программы WordCount? - PullRequest
0 голосов
/ 09 февраля 2012

Моя программа wordcount дает мне желаемый выходной файл, в котором есть все слова и их вхождения. Теперь я должен добавить этот код для поддержки запроса таким образом, чтобы при вводе определенного слова он выводил соответствующие имена файлов, а выходные данные программы wordcount должны быть входными данными для запроса.

Я получаю эти ошибки - Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 2 в org.myorg.InvertedIndex.main (InvertedIndex.java:69) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод в sun) .reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.jav‌ a: 43) в java.lang.hoj.jj.inj.g.jj apache.hadoop.util.RunJar.main (RunJar.java:156)

1 Ответ

0 голосов
/ 09 февраля 2012

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

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 ()) и т. Д.

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