转换Map器内对象中可写的字符串化Map

mv1qrgav  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(325)

实际上,我正在尝试实现一个机器学习算法,它要求我将reducer的输出写入文件,然后在下一个mapper中读取这个文件。问题是,我正在文件中编写在reducer中创建的可Map可写对象,但现在当我想访问该对象时,它只以字符串的形式出现。有没有办法转换这个物体 org.apache.hadoop.io.MapWritable@72d01691 在从文件读取时转换为实际的可Map对象??
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);

在javascript中,我们使用eval来处理这些事情有没有这样的快捷方式?

vfwfrxfs

vfwfrxfs1#

您可能正在使用 TextOutputFormat ,这是默认值,或者您可能已经设置了它。
为了正确地获取实际对象,应该使用 SequenceFileOutputFormat 并使用 SequenceFileInputFormat 在下一份工作中。
您可以使用以下方法设置输入/输出格式:

job.setInputFormat(SequenceFileInputFormat.class);
job.setOutputFormat(SequenceFileOutputFormat.class);

在接收Map器中,需要将传入对象设置为与上一个reducer输出的类型相匹配。

相关问题