当我正在处理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格式输出?
答案 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());
这将生成每个键的每个值的空格分隔列表。