ImportError: No module named bson.int64问题排查

背景

在基于hadoop 集群的spark2环境中,使用python编写任务。groupByKeys后,对value进行处理的时候,处理函数fun需要一个参数。传入后,使用spark2-submit提交后,出现如题的错误。
input:

    rdd = ...\
          .groupByKey(...)\
          .mapValues(lambda grouped: func(grouped, rule_dict)\
          ...

处理

  • 首先按照出错,安装bson,问题依旧;
  • 多次调试后,发现和传入rule_dict有关系。因为一般编写的lambda方法只有当前行作为参数,推断是否和推入额外参数有关;
  • 一顿搜索猛如虎,查到一种:
filterVar = sc.broadcast(filter_option)
rdd.map(lambda x: func(x, filterVar.value)

但仍然报错(其实这是一种共享参数,减少每次传参到集群计算)

  • 最终回到报错上,看是int64,再看传入参数实际内容时,发现dict的key都是int,而且比较大(用户id),尝试改成string,解决。

总结

暂时使用string来规避这个问题,个人认为由于任务在集群执行,集群的python环境可能对bson缺乏支持。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、bulletin board 电子公告栏,布告栏 2、 I need the money for an eme...
    寻觅一路阅读 528评论 0 0
  • 原来公司的gitlab是通过apt-get安装的,本身gitlab依赖的服务也特别多,所以想要将目前的gitlab...
    老童Steven阅读 384评论 0 1
  • 这两天妈妈热衷于买商铺。今晚才知道是他们觉得我在外漂着不靠谱买个商铺让我做点事情。做好本职工作,好好存钱,做出成绩。
    武允儿阅读 215评论 0 0