part-r-00000中的重复值

时间:2013-04-20 04:08:20

标签: hadoop mapreduce

当我正在处理xml文件(https://github.com/studhadoop/xml/blob/master/rpt)时,我得到重复的值作为输出。

bin/hadoop fs -text /user/root/t-output1/part-r-00000
ST17925 1.02
ST17925 1.02
ST17926 3.00
ST17926 3.00
ST17927 3.00
ST17927 3.00

我的mapred https://github.com/studhadoop/xml/blob/master/XmlParser11.java

为什么会这样?是否取决于xml文件的大小?我有一个大的xml文件,我有重复的值。但如果它是一个小的xml文件,输出就可以了。 更新1

还有一个疑问。 而不是像这样列出

studentid grade
ST17925 1.02
ST17926 3.00
ST17927 3.00

我应该在我的计划中做出哪些改变?

更新2 我将如何以csv格式输出?

1 个答案:

答案 0 :(得分:1)

因为在reducer实现中,您将每个值的键都写入输出收集器:

   for (Text value : values) {
      context.write(key, value);
    }

你可能想要的是:

 StringBuilder sb = new StringBuilder();
 for (Text value : values) {
    sb.append(value.toString());
    sb.append(" ");
 }
 context.write(key, new Text(sb.toString());

这将生成每个键的每个值的空格分隔列表。