報錯原因
在map或filter操作中,調用了類成員函數(shù)或類成員變量,所以需要該類可序列化。
如果在map或filter中調用的是方法內部類,或者匿名類,也會報錯。原因是Java的非靜態(tài)內部類都隱式的持有外部類的引用,序列化內部類的時候也會序列化外部類。
解決方法
方法1
將該類implements Serializable,然后將不能序列化的成員變量前加transient關鍵字,特別是JavaSparkContext成員變量。
方法2
使用lambda表達式替換匿名內部類。
方法3
調用靜態(tài)成員函數(shù)和靜態(tài)變量。