2016-05-15 28 views
0

我已经为我的地图的一部分创建下列自定义对象减少了程序:Hadoop的Deserialisation不工作的清单

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

请看看http://stackoverflow.com/questions/14249128/implementation-of-custom-writable-in-hadoop –

回答

1

我正在逐渐下面一行一个NullPointerException: growthValues.add(dValue);这意味着dValue为空。

这是错误的。这意味着growthValues为空。

0

您错过了创建反序列化实际列表的步骤。

int size = in.readInt(); 
    growthValues = new ArrayList<>(size); 
    for(int i = 0; i < size; i++){ 
     growthValues.add(in.readDouble()); 
    } 
+0

感谢Thomas.It工作! – abhi1489