我在Map Reduce程序中创建了以下自定义对象:
public class Sales implements Writable{
private List<Double> growthValues;
public List<Double> getGrowthValues() {
return growthValues;
}
public void setGrowthValues(List<Double> growthValues) {
this.growthValues = growthValues;
}
@Override
public void readFields(DataInput in) throws IOException {
int size=in.readInt();
Double dValue;
for(int i=0;i<size;i++){
dValue=in.readDouble();
growthValues.add(dValue);
}
}
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(growthValues.size());
for(Double d:growthValues){
out.writeDouble(d);
}
}
}
我在以下行收到NullPointerException: growthValues.add(dValue); 这意味着dValue为空。
是因为我有List,它应该是一个实现Writable接口的类型吗?
任何帮助将不胜感激,并提前感谢
答案 0 :(得分:1)
我在以下行收到NullPointerException: growthValues.add(dValue);这意味着dValue为空。
这是错误的。这意味着growthValues
为空。
答案 1 :(得分:0)
您错过了在反序列化中创建实际列表的步骤。
int size = in.readInt();
growthValues = new ArrayList<>(size);
for(int i = 0; i < size; i++){
growthValues.add(in.readDouble());
}