Hadoop反序列化不适用于List

时间:2016-05-15 14:49:53

标签: java hadoop mapreduce

我在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接口的类型吗?

任何帮助将不胜感激,并提前感谢

2 个答案:

答案 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());
    }