Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么实现PairFlatMapFunction的类会出现NullPointerException?_Java_Nullpointerexception_Apache Spark - Fatal编程技术网

Java 为什么实现PairFlatMapFunction的类会出现NullPointerException?

Java 为什么实现PairFlatMapFunction的类会出现NullPointerException?,java,nullpointerexception,apache-spark,Java,Nullpointerexception,Apache Spark,我在Thread上运行Spark应用程序(Spark-1.5.1-hadoop2.6),在集群上运行时会出现NullPointerException。我已经搜索了一些关于这个问题的信息,我认为我的程序似乎没有在另一个RDD函数中使用RDD函数 在使用groupbykey函数之后,我使用了flatmaptopair函数。我的重写Java代码如下所示: public class MyClass implements PairFlatMapFunction<Tuple2<A, Iterab

我在Thread上运行Spark应用程序(Spark-1.5.1-hadoop2.6),在集群上运行时会出现NullPointerException。我已经搜索了一些关于这个问题的信息,我认为我的程序似乎没有在另一个RDD函数中使用RDD函数

在使用groupbykey函数之后,我使用了flatmaptopair函数。我的重写Java代码如下所示:

public class MyClass implements PairFlatMapFunction<Tuple2<A, Iterable<B>>, C, D> {

    private static OtherClass otherObj;

    public MyClass() {
        this.otherObj = new OtherClass();
    }

    @Override public Iterable<Tuple2<C, D>> call(Tuple2<A, Iterable<B>> tuple2) {

        otherObj.getInfo(); // NullPointerException

        // ... 

        return XX;
    }
}

我在Spark中初始化静态变量时是否犯了一些错误?或者我对RDD操作的理解是错误的?

原因是
私有静态OtherClass otherObj
静态的
,如中所述:

类的默认可序列化字段定义为非瞬态和非静态字段

…并且在导致NPE的反序列化之后不会调用构造函数

Java序列化是默认的序列化机制,用于通过网络将任务从驱动程序发送给执行者


您可以使用中所述的
writeObject
readObject
方法覆盖默认行为。

@JacekLaskowski非常感谢!在搜索了有关Java序列化的更多信息后,我意识到修改
静态
瞬态
的变量不会被序列化以进行传输。反序列化后不会调用构造函数。因此,worker中的
otherObj
应该是未定义的。
WARN TaskSetManager: Lost task 7.0 in stage 1.0 (TID 17, 4-52): java.lang.NullPointerException