Java 在映射器内部的对象中转换字符串化的可写映射
实际上,我正在尝试实现一个机器学习算法,它要求我将reducer的输出写入文件,然后在下一个mapper中读取该文件。问题是,我正在文件中编写在reducer中创建的可映射可写对象,但现在当我想访问该对象时,它只作为字符串出现。有没有办法转换这个对象Java 在映射器内部的对象中转换字符串化的可写映射,java,hadoop,machine-learning,mapreduce,Java,Hadoop,Machine Learning,Mapreduce,实际上,我正在尝试实现一个机器学习算法,它要求我将reducer的输出写入文件,然后在下一个mapper中读取该文件。问题是,我正在文件中编写在reducer中创建的可映射可写对象,但现在当我想访问该对象时,它只作为字符串出现。有没有办法转换这个对象org.apache.hadoop.io。MapWritable@72d01691从文件读取时转换为实际的可映射可写对象 mapper中的部分代码: DoubleWritable[][] Tdata = new DoubleWritable[T.nu
org.apache.hadoop.io。MapWritable@72d01691
从文件读取时转换为实际的可映射可写对象
mapper中的部分代码:
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);
DoubleWritable[]Tdata=新的DoubleWritable[T.numRows()][T.numColumns()];
for(int k=0;k
在javascript中,我们使用eval来处理这些事情,有没有这样的快捷方式?您可能正在使用
TextOutputFormat
写入数据,这是默认值,或者您可能已经设置了它
为了正确地获取实际对象,您应该在下一个作业中使用SequenceFileOutputFormat
写入输出,并使用SequenceFileInputFormat
读入
您可以使用以下方法设置输入/输出格式:
job.setInputFormat(SequenceFileInputFormat.class);
job.setOutputFormat(SequenceFileOutputFormat.class);
在接收映射器中,您需要将传入对象设置为与上一个reducer输出的类型相匹配。您可能正在使用
TextOutputFormat
写入数据,这是默认值,或者您可能已经设置了它
为了正确地获取实际对象,您应该在下一个作业中使用SequenceFileOutputFormat
写入输出,并使用SequenceFileInputFormat
读入
您可以使用以下方法设置输入/输出格式:
job.setInputFormat(SequenceFileInputFormat.class);
job.setOutputFormat(SequenceFileOutputFormat.class);
在接收映射程序中,您需要将传入对象设置为与前一个reducer输出的类型相匹配。实际上,我一开始就在尝试此操作,但由于使用旧API,所以出现了错误。但现在一切都解决了。感谢BTW实际上我一开始就在尝试这个,但是因为使用了旧的API,所以出现了错误。但现在一切都解决了。谢谢,顺便说一句