Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization Hadoop中的序列化-可写_Serialization_Hadoop_Writable - Fatal编程技术网

Serialization Hadoop中的序列化-可写

Serialization Hadoop中的序列化-可写,serialization,hadoop,writable,Serialization,Hadoop,Writable,这是实现可写的类 public class Test implements Writable { List<AtomicWritable> atoms = new ArrayList<AtomicWritable>(); public void write(DataOutput out) throws IOException { IntWritable size = new IntWritable(atoms.size());

这是实现可写的类

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);
        }
    }
}
公共类测试实现可写{
列表原子=新的ArrayList();
public void write(DataOutput out)引发IOException{
IntWritable size=新的IntWritable(atoms.size());
大小。写(出);
for(原子可写原子:原子)
原子。写出;
}
public void readFields(DataInput in)引发IOException{
原子;
IntWritable size=新的IntWritable();
读取字段的大小(英寸);
int n=size.get();
而(n-->0){
AtomicWritable atom=新的AtomicWritable();
atom.readFields(in);
原子。添加(原子);
}
}
}
如果有人能帮助我理解如何调用write和readFields方法,我将不胜感激。 基本上,我无法理解在这种情况下如何构造测试对象。一旦对象写入DataOutput obj,我们如何在DataInput对象中恢复它。这听起来可能很傻,但我是Hadoop的新手,并且被分配了一个使用Hadoop的项目。请帮忙

谢谢

基本上,在这种情况下,我无法理解如何构造
Test
对象

是的,你没抓住重点。如果需要构造
Test
的实例并填充
atoms
,则需要将构造函数添加到
Test

public Test(ArrayList<AtomicWritable> atoms) {
     this.atoms = atoms;
}
公共测试(ArrayList)


您不调用<代码> ReadFrase<代码> >代码>写/代码>;Hadoop框架在需要序列化和反序列化和反序列化和反序列化输入和输出<代码> map < /COD>和<代码>减少< /代码>。

您需要考虑它不是线程安全的。小Pro提示:如果你要问很多,尤其是在较少的人群中。像Hadoop(没有C#和Java那么拥挤)这样的主题,确保你投票并接受你所提出问题的答案。如果你不这样做,你很快就会失去对社区的同情。永远不要忘记默认构造函数;-)@Thomas Jungblut:他不能设置
atoms
(所以他要么需要一个能让他这么做的构造器,要么需要一个setter)。尽管如此,我还是要做一个小的编辑。谢谢。非常感谢Jason和Thomas!!这很有帮助!!同时,感谢你上面关于发布问题的提示:)我对这个网站非常陌生。