Spark(java)报错org.apache.spark.SparkException: Task not serializable

报错原因

在map或filter操作中,调用了类成员函数或类成员变量,所以需要该类可序列化。
如果在map或filter中调用的是方法内部类,或者匿名类,也会报错。原因是Java的非静态内部类都隐式的持有外部类的引用,序列化内部类的时候也会序列化外部类。

解决方法

方法1

将该类implements Serializable,然后将不能序列化的成员变量前加transient关键字,特别是JavaSparkContext成员变量。

方法2

使用lambda表达式替换匿名内部类。

方法3

调用静态成员函数和静态变量。

你可能感兴趣的:(Spark(java)报错org.apache.spark.SparkException: Task not serializable)