spark map操作使用类中定义的方法、变量出现NullpointException或Task not serializable问题解决

      spark 计算应用,我们经常使用map、filter、flatmap转换计算,但spark standalone 模式或其他yarn、mesos分布式计算,若要引用其他对象或共享变量,需要用支持Serializable序列化,或使用broadcast定义变量,这样在spark task并发下就可以在多个不同节点的excutor执行正确运算。

      在local 模式,map计算运用类中的某个方法(必须 static 方法)是不会报task not serializable问题。但在其他模式就出错NullPointException,或Task not serializable。这个时候,这个方法需要放到一个可序列化(implements serializable )的类中,并且变成类中的一个方法。实例化这个类对象,进行广播即可。

       示例:

import scala.reflect.ClassTag;
        ClassTag<Geo> classTagTest = scala.reflect.ClassTag$.MODULE$.apply(Geo.class);
        Broadcast<Geo> broadcastTest = sparkSession.sparkContext().broadcast(new Geo(cityPath), classTagTest);

在map方法里,调用broadcastTest.value().类中的方法即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值