我同意 Thomas Jungblut;自己编写Writable
可能是最好的(也是最简单的)解决方案。
我最近写了一个Writable
名为的自定义IntPairWritable
,它只包含两个整数。这是我的代码。
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.giraph.utils.IntPair;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Writable;
public class IntPairWritable extends IntPair implements Writable, Configurable {
private Configuration conf;
public IntPairWritable() {
super(0, 0);
}
public IntPairWritable(int fst, int snd) {
super(fst, snd);
}
@Override
public void readFields(DataInput input) throws IOException {
super.setFirst(input.readInt());
super.setSecond(input.readInt());
}
@Override
public void write(DataOutput output) throws IOException {
output.writeInt(super.getFirst());
output.writeInt(super.getSecond());
}
@Override
public Configuration getConf() {
return this.conf;
}
@Override
public void setConf(Configuration conf) {
this.conf = conf;
}
@Override
public String toString() {
return super.getFirst() + "," + super.getSecond();
}
}
你的Writable
班级可能看起来很相似。也许喜欢
public class RetraceableWritable<I extends Writable, D extends Writable> implements Writable, Configurable {
private I senderId;
private D data;
...
...等等。
- 注 1:默认构造函数必须始终存在,以确保 Hadoop 可以创建您的类的实例。
- 注 2:当一切就绪时,Giraph 似乎喜欢它,
configurable
所以实现这个接口是个好主意。
问候