这是实现可写。。
public class Test implements Writable {
List<AtomicWritable> atoms = new ArrayList<AtomicWritable>();
public void write(DataOutput out) throws IOException {
IntWritable size = new IntWritable(atoms.size());
size.write(out);
for (AtomicWritable atom : atoms)
atom.write(out);
}
public void readFields(DataInput in) throws IOException {
atoms.clear();
IntWritable size = new IntWritable();
size.readFields(in);
int n = size.get();
while(n-- > 0) {
AtomicWritable atom = new AtomicWritable();
atom.readFields(in);
atoms.add(atom);
}
}
}
如果有人能帮助我理解如何调用write和readfields方法,我将不胜感激。在这种情况下,我基本上无法理解如何构造测试对象。一旦对象被写入dataoutput对象,我们如何在datainput对象中恢复它。这听起来很傻,但我是hadoop的新手,并且被分配了一个使用hadoop的项目。请帮忙。
谢谢!!!
1条答案
按热度按时间jhiyze9q1#
基本上我不明白如何构造
Test
对象。是的,你没抓住重点。如果需要构造
Test
和填充atoms
,则需要向Test
:或者,您需要使用默认构造函数并添加一个方法或setter,使您可以将项添加到
atoms
或者设置atoms
. 后者在hadoop框架中非常常见,有一个默认构造函数和一个set
方法。参见,例如。,Text.set
.你不打电话
readFields
以及write
; 当hadoop框架需要对输入和输出进行序列化和反序列化时,它会为您做到这一点map
以及reduce
.