在自定义Writable类型中键入变量的最佳方法是什么?

时间:2012-07-03 07:53:15

标签: java hadoop mapreduce

我正在定义一个自定义可写类型,目前我有类似的东西:

public static class MyType implements Writable {
  private int value1;
  private String value2;

  // ... override code etc 
}

我应该使用int和字符串还是应该使用intWritable和Text?我见过的例子倾向于使用我使用过的方法,但似乎使用Writable类型可以更有效率。

3 个答案:

答案 0 :(得分:1)

这很好,因为你通过覆盖读写来进行序列化。您可以使用intsreadInt()来编写writeInt()这样的原语,依此类推其他原语或字符串。

例如,

TextLongWritables主要用于拥有一些可以使用的内置类型。如果你需要编写对象,那么使用基元就可以了,TextLongWritable只不过是一种可序列化的包装器。

答案 1 :(得分:1)

你可以使用int,string等。这很好。当您实现Writable时,您需要覆盖readFields(DataInput in)write(DataOutput out)方法。您需要以相同的顺序读取变量。这就是序列化发生的地方。而且你不需要痛苦地制作可写类型的变量。

答案 2 :(得分:-1)

我倾向于像Text一样编写Writable,因为在这些类中已经对I / O进行了一些重要的优化。然而,最好的办法是两种方式尝试,看看哪一种表现更好。