Java 布尔和嵌套bean的spark中出现空指针异常

Java 布尔和嵌套bean的spark中出现空指针异常,java,apache-spark,apache-spark-dataset,Java,Apache Spark,Apache Spark Dataset,我正在尝试为一个bean类构建一个spark数据集,它有一个本身是bean的字段和一个布尔字段,但是在这样做时,我得到了一个null指针异常。如果我对第二个字段使用double而不是boolean,空指针异常将消失 以下是cope代码段: SparkSession spark = SparkSession.builder().appName("Test").getOrCreate(); Encoder<cR> cREncoder = Encoders.bean(cR.class);

我正在尝试为一个bean类构建一个spark数据集,它有一个本身是bean的字段和一个布尔字段,但是在这样做时,我得到了一个null指针异常。如果我对第二个字段使用double而不是boolean,空指针异常将消失

以下是cope代码段:

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

}
SparkSession spark=SparkSession.builder().appName(“Test”).getOrCreate();
编码器cREncoder=Encoders.bean(cR.class);
cR cR1=新cR(4.5,新c(“abc”));
cR cR2=新的cR(5.5,新的c(“xyz”);
List listcR=Arrays.asList(cR1,cR2);
Dataset cRData=spark.createDataset(listcR,cREncoder);
System.out.println(“Main中的持续时间”+cR1.getDuration());
System.out.println(“Main中的持续时间”+cR2.getDuration());
cRData.printSchema();
cRData.show();
公共类cR实现java.io.Serializable{
公共双倍期限;
//公共布尔版本;
公共社区;;
公共cR(双v,c cu){
这个时间=v;
这个._c=cu;
//this.version=ver;
System.out.println(“持续时间:+此持续时间”);
}
//数据成员的getter setter方法
}
公共类c实现java.io.Serializable{
公共字符串id;
公共c(字符串s){
id=s;
}
//二传手
}

看来存在的火花问题已经存在很长时间了。解决方法是将bean类中的所有布尔值替换为布尔值。

Boolean是一个对象,而double是一个基元。尽管如此,即使它是一个对象,为什么它不工作?能否更具体地说明发生NullPointerException的位置?很难从注释掉的代码中分辨出最初的问题是什么。