0

当我正在处理一个 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

我的映射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 格式输出?

4

1 回答 1

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());

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

于 2013-04-20T14:46:34.777 回答