在hadoop中可写入接口的错误

时间:2014-05-24 16:13:27

标签: hadoop writable

我创建了一个VectorWritable类,它实现了Writable接口。我试图将VectorWritable对象写入输出文件,但我得到了这个:VectorWritable @ 1355b88b。这是我的写法:

public void write(DataOutput out) throws IOException {  
   getVectorString().write(out);
}

函数getVectorString()给出了一个Text对象。

1 个答案:

答案 0 :(得分:1)

我没有50位代表发表评论,因此我会将其作为答案撰写。

如何在getVectorString()中创建此Text对象?您是否在VectorWritable对象上调用默认的toString()方法,该对象返回的字符串类似于" VectorWritable @ 1355b88b"除非你覆盖它以返回一个更有用的字符串来描述你的对象吗?

编辑:

根据您的评论Text vectorStringVectorWritable类的成员,您可以在Text方法中设置此set对象,因此我猜set方法也在VectorWritable内,它不是静态方法,为什么要将VectorWritable对象传递给它?看起来您可以在一个set对象上调用此VectorWritable方法,将另一个方法传递给它,并使vectorString与周围的VectorWritable对象不匹配。

如何将VectorWritable写入输出?您是否调用了在问题中发布的write方法?因为此输出VectorWritable@1355b88b看起来像是将VectorWritable作为参数传递给调用其默认toString()方法的方法,该方法将返回类似VectorWritable@1355b88b的字符串。

可写接口用于序列化对象。因此,您可以将对象写入输出,并将其读回,但是使用您的实现,很难解析您创建的字符串并将对象读回。 Example of implementation

   public void write(DataOutput out) throws IOException {
     out.writeInt(counter);
     out.writeLong(timestamp);
   }

   public void readFields(DataInput in) throws IOException {
     counter = in.readInt();
     timestamp = in.readLong();
   }