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缺乏支持。

你可能感兴趣的:(ImportError: No module named bson.int64问题排查)