BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #24899同步于 2017/7/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

关于spark,java的一个问题

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