实际上我正在尝试实现一个机器学习算法,这需要我在文件中写入reducer的输出,然后在下一个映射器中读取此文件。问题是,我写MapWritable对象创建在减速器在文件中,但现在当我想要访问的对象,它的到来作为字符串。有没有办法将这个对象org.apache.hadoop.io.MapWritable@72d01691
转换成实际的MapWritable对象从文件读取??
DoubleWritable[][] Tdata = new DoubleWritable[T.numRows()][T.numColumns()];
for (int k = 0; k < Tdata.length; k++) {
for (int j = 0; j < Tdata[k].length; j++) {
Tdata[k][j] = new DoubleWritable(T.get(k, j));
}
}
DoubleArrayWritable t = new DoubleArrayWritable();
t.set(Tdata);
DoubleWritable[][] Hdata = new DoubleWritable[H.numRows()][H.numColumns()];
for (int k = 0; k < Hdata.length; k++) {
for (int j = 0; j < Hdata[k].length; j++) {
Hdata[k][j] = new DoubleWritable(H.get(k, j));
}
}
DoubleArrayWritable h = new DoubleArrayWritable();
h.set(Hdata);
mw.put(new IntWritable(0), h);
mw.put(new IntWritable(1), t);
context.write(new Text(splitId), mw);
在javascript中,我们使用eval来做这些事情有没有这样的快捷方式?
您可能正在使用TextOutputFormat
写入数据,这是默认值,或者您可能已经设置了它。
要正确获得实际对象,在下一个作业中应该使用SequenceFileOutputFormat
编写输出并使用SequenceFileInputFormat
读取。
你可以设置输入/输出格式,如:
job.setInputFormat(SequenceFileInputFormat.class);
job.setOutputFormat(SequenceFileOutputFormat.class);
在接收映射器中,您需要设置传入对象以匹配前一个reducer输出的类型。