Spark未序列化问题(Task not Serialize)
spark未序列化问题虽然不难,但资料却不系统,现总结如下:
问题发生原因
当spark算子在使用外部变量时,就会发生序列化问题,如下图所示:
上述图中算子map会在各个节点运行,属于不同jvm间数据交换,需要对交换的内容进行序列化。这就是为什么需要序列化的原因。
方法
1) 序列化类,并使用broadcast广播
2) 在算子内调用变量
序列化类,使用broadcast广播变量,一个不错的方法,优势在于初始化类的时候只需要一次。其使用方法如下:
类需要实现接口,此类由java实现,如下:
方法二,是在内部实现类:
如果在算子内需要sparkconf等参数,可以通过 conf =SparkContext.getOrCreate()实现
其他可以在算子内初始化类,缺点是,每个map都需要初始化类。且不需要序列化额外操作。
实现如下:
有朝一日同风起,扶摇直上九万里
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步