报错原因
在map或filter操作中,调用了类成员函数或类成员变量,所以需要该类可序列化。
如果在map或filter中调用的是方法内部类,或者匿名类,也会报错。原因是Java的非静态内部类都隐式的持有外部类的引用,序列化内部类的时候也会序列化外部类。
解决方法
方法1
将该类implements Serializable,然后将不能序列化的成员变量前加transient关键字,特别是JavaSparkContext成员变量。
方法2
使用lambda表达式替换匿名内部类。
方法3
调用静态成员函数和静态变量。
网友评论