joj*_*oba 4 java arrays hadoop key-value writable
我在之前的一个主题Hadoop中问过一个非常类似的问题:我怎样才能将一个双精度数组作为键值对中的值?.
我的问题是我想将一个双数组作为值从map传递到reduce阶段.我得到的答案是序列化,转换为Text,将其传递给reducer并反序列化.这是一个很好的解决方案,但它像序列化和反序列化两次.
例如,ArrayWritable只接受像FloatWritable这样实现Writable的类型.所以另一个解决方案是将我的双精度数组转换为DoubleWritables数组.但这需要一些时间,而Writable是一种非常昂贵的资源.是不是有一个非常简单的解决方案,如ArrayWritable array = new ArrayWritable(Double.class)???
只需实现自己的Writable接口.
例如,
public class DoubleArrayWritable implements Writable {
private double[] data;
public DoubleArrayWritable() {
}
public DoubleArrayWritable(double[] data) {
this.data = data;
}
public double[] getData() {
return data;
}
public void setData(double[] data) {
this.data = data;
}
public void write(DataOutput out) throws IOException {
int length = 0;
if(data != null) {
length = data.length;
}
out.writeInt(length);
for(int i = 0; i < length; i++) {
out.writeDouble(data[i]);
}
}
public void readFields(DataInput in) throws IOException {
int length = in.readInt();
data = new double[length];
for(int i = 0; i < length; i++) {
data[i] = in.readDouble();
}
}
}
Run Code Online (Sandbox Code Playgroud)