task的序列化问题和线程安全问题
在spark中,使用类实例,一般分为四种情况
- Driver初始化一个object,这个单例对象要伴随着Task发送到Executor,但是一个Executor中只有一份,必须实现序列化接口, 使用共享成员变量有可能会出现线程安全问题
- Driver实例化一个类的实例(new一个实例),在函数内容引用了这个实例,该实例会伴随着Task发送到Executor,每个Task有一个单独的实例,必须实现序列化接口
- 在executor端初始化,在函数内部使用一个object,这个object不用实现序列化,这个object是在Executor中初始化的,并且一个Executor中只有一份,使用共享成员变量有可能会出现线程安全问题
- 在executor端初始化,在函数内部new 一个实例,每来一条数据new一个类的实例,这样会频繁GC,浪费大量资源

具体可以看一下这个链接
https://blog.csdn.net/zuochang_liu/article/details/108063129

浙公网安备 33010602011771号