Hadoop に関するこの質問を投稿しましたが、問題を少し絞り込んだため、より具体的な質問を作成しています。
Hadoop Map/Reduce ジョブを作成しました。CSV を受け取り、それを defaultdict に読み込み、2 つのファイル (肯定的な言葉と否定的な言葉) をインポートしてから、csv のすべてのテキストに対して感情分析を実行します。次に、この結果 (リデューサーによって収集されたもの) を出力し、すべてのキーを結合します。
次のようにローカルで実行できます。
cat ~/Text/ListOfTexts.csv | python hadoop_map.py | sort | python hadoop_reduce.py
これにより、意図した結果が問題なく生成されます。次に、次のように Hadoop Streaming を使用して実行しようとします。
bin/hadoop jar contrib/streaming/hadoop-streaming-1.1.2.jar
-file positive_words.txt -file negative_words.txt
-file hadoop_map.py -mapper hadoop_map.py
-file hadoop_reduce.py -reducer hadoop_reduce.py
-input /ListOfTexts.csv -output /OutputOfTexts.txt
これはすべての情報を処理しますが、何らかの理由で結果を適切に結合しません。「カウント」変数を実装して、スキャンしているドキュメントの数を確認しました (1199 である必要があります)。マッパーだけを実行すると、2 つの出力ファイルが得られます。1 つは 630 で、もう 1 つは 569 です (合計すると 1199 になります)。
ただし、ローカルで使用されているのと同じコードでレデューサーを使用すると、630 しかカウントされません。さらに、すべてのペアが組み合わされているわけではありません。これは、Hadoop が結果を適切に結合していないと思わせます。なぜこれが起こっているのか誰にも分かりますか?必要に応じてコードを投稿できますが、ここでは単語数を削減しようとしています。