【发布时间】:2016-04-08 21:47:17
【问题描述】:
我正在从 csv 读取数据并将该数据转换为 python 类对象。但是当我尝试使用用户定义的类对象迭代该 rdd 时,我会收到类似的错误,
_pickle.PicklingError: Can't pickle <class '__main__.User'>: attribute lookup User on __main__ failed
我在这里添加了部分代码,
class User:
def __init__(self, line):
self.user_id = line[0]
self.location = line[1]
self.age = line[2]
def create_user(line):
user = User(line)
return user
def print_user(line):
user = line
print(user.user_id)
conf = (SparkConf().setMaster("local").setAppName("exercise_set_2").set("spark.executor.memory", "1g"))
sc = SparkContext(conf = conf)
users = sc.textFile("BX-Users.csv").map(lambda line: line.split(";"))
users_objs = users.map(lambda entry: create_user(entry))
users_objs.map(lambda entry: print_user(entry))
对于上面的代码,我得到的结果是,
PythonRDD[93] at RDD at PythonRDD.scala:43
CSV 数据源 URL(需要 zip 提取):HERE
更新: 将代码更改为包含 collect 将再次导致错误,我仍然必须尝试使用 Pickle。我以前没试过,如果你有样品,我可以很容易地做到。
users_objs = users.map(lambda entry: create_user(entry)).collect()
【问题讨论】:
标签: python apache-spark ipython pyspark