我是 Hadoop 的新手,两天来我一直在努力弄清楚为什么 output.collect 没有收集正确的值。
我自己解释一下:事实上,(为了简化起见)我有以下映射方法:
public
void
map(LongWritable key, Text value, OutputCollector<Text, MyObject> output, Reporter reporter)
throws IOException {
try {
ForXmlHandling message = (ForXmlHandling) unmarshaller.unmarshal(new StringReader(value.toString()));
MyObject row = XmlParser.parse(message);
row.setOrigin(true);
output.collect(new Text(row.getPnrRecordKey().toString()), row);
}
catch(JAXBException e) {
LOG.debug(e);
}
MyObject 是我创建的对象:
public class MyObject {
private boolean original;
private boolean split;
....
}
事实上,当我在 Debug模式下仅启动映射器时,即使我将行 (MyObject) 的 origin 属性设置为 true,映射器 (output.collect) 的输出始终是行origin 属性设置为 false( bool 值的默认值)。我不明白 output.collect 有什么问题。
我们非常欢迎任何帮助。谢谢!
最佳答案
感谢马特的回答!确实,问题出在 readFields 的实现上,因为我没有调用 write:
//write
_original.write(out);
_split.write(out);
//readFields
_original = new BooleanWritable();
_split = new BooleanWritable();
_original.readFields(in);
_split.readFields(in);
关于hadoop - Output.collect mapreduce 似乎没有取正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319669/