我必须使用C ++编写Hadoop程序并处理复杂的输出值结构。 不幸的是,我无法弄清楚如何在MapReduce中以Avro格式发出这种结构。 有一些像DataFileWriter这样的作家,它们对我很有用。但就HDFS而言,这一切都没有意义。
我现在如何发布结构:
IOSerializer serializer;
context.emit(key, serializer.toString(output));
我自己写的这个自定义toString方法(对不起名字,我完全来自Java世界)。 这只是String的自定义序列化。我真的想要一些互操作性,并决定使用Avro。
这是将Avro写入文件的代码:
avro::DataFileWriter<fusion_solve::graph> dfw("test.bin", schema);
dfw.write(output);
dfw.close();
我希望能做的是这样的事情:
IOSerializer serializer;
context.emit(serializer.toAvro(key, output));
目前我很乐意将普通的JSON字符串作为输出,以便稍后进行转换。 对我来说另一个选择是用Java编写自定义RecordWriter。但是在这种情况下我应该使用哪种类型的输入数据,JSON?