Spark未序列化問題(Task not Serialize)


spark未序列化問題雖然不難,但資料卻不系統,現總結如下:

問題發生原因

當spark算子在使用外部變量時,就會發生序列化問題,如下圖所示:

上述圖中算子map會在各個節點運行,屬於不同jvm間數據交換,需要對交換的內容進行序列化。這就是為什么需要序列化的原因。

方法

1) 序列化類,並使用broadcast廣播

2) 在算子內調用變量

序列化類,使用broadcast廣播變量,一個不錯的方法,優勢在於初始化類的時候只需要一次。其使用方法如下:

 

類需要實現接口,此類由java實現,如下:

 

 

方法二,是在內部實現類:

如果在算子內需要sparkconf等參數,可以通過 conf =SparkContext.getOrCreate()實現

其他可以在算子內初始化類,缺點是,每個map都需要初始化類。且不需要序列化額外操作。

實現如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM