首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PicklingError中的PicklingError (PicklingError:无法选择<class‘__main_. Person’>:__main__上的属性查找失败)

PicklingError中的PicklingError (PicklingError:无法选择<class‘__main_. Person’>:__main__上的属性查找失败)
EN

Data Science用户
提问于 2020-05-14 06:11:15
回答 3查看 6.8K关注 0票数 1

我不能在下面的课上泡菜。我使用的是数据块6.5ML(包括ApacheSpark2.4.5,Scala2.11)

代码语言:javascript
复制
import pickle
class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age
p1 = Person("John", 36)
pickle.dump(p1,open('d.pkl','wb'))```

PicklingError: Can't pickle <class '__main__.Person'>: attribute lookup Person on __main__ failed
EN

回答 3

Data Science用户

发布于 2021-04-18 20:05:40

来自这里的可能答案

问题是,您正在尝试从定义对象的模块中提取对象。如果您将类移动到一个单独的文件中,并将其导入到您的脚本中,那么它应该可以工作。

不过,这个解决方案对我来说在iPython笔记本上是行不通的。在这里,我将从这里获得一些额外的信息

Python的泡菜实际上不序列化类:它会序列化实例,并在序列化中添加对每个实例类的引用,而该引用基于绑定到定义良好的模块中的名称的类。因此,没有模块名称但在其他类中作为属性存在的类的实例,或者列表和字典中的数据,通常不会工作。一个直截了当的事情,一个人可以尝试做的是尝试使用迪尔而不是泡菜。它是一个第三方包,它的工作方式类似于“泡菜”,但是它有扩展来实际序列化任意的动态类。虽然使用dill可能会帮助其他人到达这里,但这不是您的情况,因为为了使用dill,您必须对底层的RPC机制( PySpark使用dill而不是泡菜)进行修改,这可能不够简单,也不足以满足生产使用的需要。如果问题确实是关于动态创建的类是不可选的,那么您可以做的是为动态类本身创建额外的元类,而不是使用"type",在这些元类上创建适当的getstate和setstate (或其他帮助方法,就像泡菜文档中的那样)--这可能使这些类能够被普通的Pickle腌制。也就是说,使用Pickler助手方法代替类型(.,(object,),.)的独立元类。在你的密码里。但是,“不可选择的对象”不是您所得到的错误--它是一个属性查找错误,这表明您正在构建的结构不够好,不能让Pickle对其进行反思,并从您的一个实例中获取所有成员--它与类对象的不可挑选性无关。由于您的动态类在类上作为属性存在(类本身并不是泡沫化的),而不是实例中的属性,所以泡菜很有可能不关心它。检查上面泡菜上的文档,也许您所需要的是正确的助手--对您的类进行腌制的方法,在元类上没有什么不同,您所拥有的一切都可以正常工作。

票数 2
EN

Data Science用户

发布于 2022-03-07 21:06:16

不要定义一个类,而是尝试定义一个NamedTuple。

代码语言:javascript
复制
import pickle
from collections import namedtuple

Person = namedtuple("Person", "name age")

p1 = Person("John", 36)
pickle.dump(p1,open('d.pkl','wb'))
票数 0
EN

Data Science用户

发布于 2022-06-23 11:04:05

我的解决方案:

将类人放入单独的例如"utility.py“

代码语言:javascript
复制
import utility
import pickle
 
new_person = pickle.loads(pickle.dumps(utility.Person()))

它解决了我的内核问题!

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/74172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档