spark未序列化問題雖然不難,但資料卻不繫統,現總結以下:java
問題發生緣由jvm
當spark算子在使用外部變量時,就會發生序列化問題,以下圖所示:spa
上述圖中算子map會在各個節點運行,屬於不一樣jvm間數據交換,須要對交換的內容進行序列化。這就是爲何須要序列化的緣由。blog
方法接口
1) 序列化類,並使用broadcast廣播get
2) 在算子內調用變量it
序列化類,使用broadcast廣播變量,一個不錯的方法,優點在於初始化類的時候只須要一次。其使用方法以下:spark
類須要實現接口,此類由java實現,以下:ast
方法二,是在內部實現類:變量
若是在算子內須要sparkconf等參數,能夠經過 conf =SparkContext.getOrCreate()實現
其餘能夠在算子內初始化類,缺點是,每一個map都須要初始化類。且不須要序列化額外操做。
實現以下: