当我正在处理一个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
my 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格式?
因为在您的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());
生成每个键的每个值的空格分隔列表。