我发布了这个关于 Hadoop 的问题,但现在我的问题缩小了一点,所以我创建了一个更具体的问题。
我创建了一个 Hadoop Map/Reduce 作业。它需要一个 CSV 并将其读入 defaultdict,导入两个文件(正面和负面词),然后对 csv 中的所有文本进行情感分析。然后它输出这个结果(由 reducer 收集)并组合所有键。
我可以像这样在本地运行它:
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 个)。如果我只运行映射器,我会得到两个输出文件,一个是 630,另一个是 569(因此加起来是 1199)。
但是,当我使用与本地使用的代码相同的减速器时,我只计算了 630。此外,并非所有对都已合并。这让我觉得 Hadoop 没有正确组合结果。有人知道为什么会这样吗?如有必要,我可以发布我的代码,但我试图减少这里的字数。