【发布时间】:2016-04-13 20:47:07
【问题描述】:
我有一个如下示例输入文件,其中包含序列号、姓名、药物、性别、花费的金额。我的要求是获得每种药物的总花费。我已经编写了一个 Mapreduce 程序,并在我的本地机器上运行它,它位于安装了 Hadoop 和其他必要软件包的单节点集群下。
- Irma Ellison,avil,female,872
- 希拉里·布什,avil,男,999
- Ahmed Mejia,扑热息痛,女,654
- 格蕾丝·布恩,metacin,女,918
- Hayes Ortiz,扑热息痛,男,734
- Lani Matthews,扑热息痛,女,836
- 凯瑟琳·斯图尔特,扑热息痛,男,178
- 乔纳斯·布恩,metacin,女,649
- Desiree Pearson,avil,男,439
- Britanney Sullivan,metacin,女,659
对于上述输入,我期望输出如下。
avil 2310
metacin 2226
paracetamol 2402
当我将 reducer 类声明为
public class VisReducer extends Reducer 时。我得到了预期的输出,一切看起来都很好。
但我错误地将reducer 类声明更改为
public class VisReducer extends Reducer, Text, IntWritable > 。输出似乎只是一个 Mapper 输出,并且由于某种原因,Reducer 类中的 reduce 方法没有运行。我在 reduce 方法中添加了一个 System.out.println(),并检查了日志,看不到我打印的内容,而在第一种情况下,我可以看到输出。 n我无法理解导致问题的原因。
有人可以帮助我了解到底发生了什么。
在我的第二种情况下输出。
avil 439
avil 999
avil 872
metacin 659
metacin 649
metacin 918
paracetamol 178
paracetamol 836
paracetamol 734
paracetamol 654
这可能是一个非常基本的问题,因为我刚刚开始学习 hadoop,在网上找不到任何相关的问题。
【问题讨论】:
-
发布您的驱动程序代码。