2017-02-27 34 views
0

我想为bean类创建一个spark数据集,它有一个本身是一个bean和一个布尔型字段的字段,但是我这样做的时候得到一个空指针异常。如果我为第二个字段使用double而不是布尔值,则空指针异常消失。布尔值和嵌套bean的spark中的空指针异常

下面是应对片段:

SparkSession spark = SparkSession.builder().appName("Test").getOrCreate(); 
Encoder<cR> cREncoder = Encoders.bean(cR.class); 

cR cR1 = new cR (4.5, new c("abc")); 
cR cR2 = new cR(5.5, new c("xyz")); 
List<cR > listcR = Arrays.asList (cR1,cR2); 

Dataset<cR > cRData= spark.createDataset(listcR,cREncoder); 
System.out.println ("Duration in Main " + cR1.getDuration()); 
System.out.println ("Duration in Main " + cR2.getDuration()); 
cRData.printSchema(); 
cRData.show(); 

public class cR implements java.io.Serializable { 
    public double duration; 
// public Boolean version; 
    public c _c; 

    public cR (double v, c cu) { 
     this.duration = v; 
     this._c = cu; 
//  this.version = ver; 
     System.out.println("Duration : " + this.duration); 
    } 

// getter setter methods for data member 
} 

public class c implements java.io.Serializable { 
    public String id; 

    public c (String s) { 
     id= s; 
    } 

//getter and setters 

} 
+0

布尔是一个对象,而double是一个基元。 –

+0

即使它是一个对象,为什么它不起作用? – user1534615

+0

您可以更具体地了解NullPointerException发生的位置吗?从注释掉的代码中很难看出原始问题。 –

回答

0

它看起来现有星火问题一直存在很长时间。解决方法是在bean类中将所有布尔值替换为布尔值。