返回信息流首先我建了一个类A a = new A();
A类中有一个静态成员类public static B b,也初始化了,检查显示 b != null;
然后我写了一个map操作,在map操作中,会调用a.b,但是会出现b为null的错误。
而且我在setMaster("local")时是没有这个错误的,结果正确;但分布式运行就会报这个错误了
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #24899同步于 2017/7/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
关于spark,java的一个问题
bysunshine
2017/7/18镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
很简单,你需要把这个类广播一下,搜一下spark broadcast。在单机情况下,这个类是可见的,而在分布式情况下,需要通过广播到各个分区,才能使用这个类。
【 在 kayla 的大作中提到: 】
: 贴一下代码和你手动设置的参数吧。
: 我猜测是序列化反序列化的问题。
应该是序列化问题,java的静态成员是不能序列化的,在分布式环境下没法分发,多谢!
不是的。
无论你有没有手动 broadcast,在每个节点都是可以访问到的,task 在分发的时候会把 closure 引用到的变量一起分发出去。
【 在 kingfanq 的大作中提到: 】
: 很简单,你需要把这个类广播一下,搜一下spark broadcast。在单机情况下,这个类是可见的,而在分布式情况下,需要通过广播到各个分区,才能使用这个类。