Python 序列化包含函数含义的对象

Python 序列化包含函数含义的对象,python,apache-spark,Python,Apache Spark,以下文本摘自本手册第3章 传递函数时要注意的一个问题是不经意间 序列化包含函数的对象。当你经过一个 函数,该函数是对象的成员,或包含对的引用 对象中的字段(例如,self.field),Spark发送整个对象 到工作节点,它可以比信息位大得多 您需要(参见示例3-19)。有时,这也会导致您的 如果您的类包含Python无法访问的对象,则程序将失败 弄清楚怎么泡菜 请解释作者试图传达的信息 分布式系统中的worker没有共享内存,因此每个worker都必须拥有运行代码所需的所有函数、数据等的副本

以下文本摘自本手册第3章

传递函数时要注意的一个问题是不经意间 序列化包含函数的对象。当你经过一个 函数,该函数是对象的成员,或包含对的引用 对象中的字段(例如,self.field),Spark发送整个对象 到工作节点,它可以比信息位大得多 您需要(参见示例3-19)。有时,这也会导致您的 如果您的类包含Python无法访问的对象,则程序将失败 弄清楚怎么泡菜


请解释作者试图传达的信息

分布式系统中的worker没有共享内存,因此每个worker都必须拥有运行代码所需的所有函数、数据等的副本。因此,当您拨打本应分发的电话时,您应该通过确保您没有复制工作人员真正不需要的内容来减少此开销


在本例中,
rdd.filter
是一个向量化(功能性)操作,可以分布在多个工作人员之间。它只接受一个参数-一个函数。作者警告您,如果该函数引用了任何对象的字段(属性)(
self
是对象用于引用自身的内部术语,因此您基本上引用了将在其自身方法中调用
filter
方法的对象),则整个对象(实例)将复制到工作对象,不仅仅是一个轻量级的功能。对象可以包含引用大量数据的许多属性

坦率地说,我认为作者是错的,因为他们不理解Python中变量是如何工作的。在假定安全的示例中,
query
只是
self.query
的另一个名称,因此结果是相同的。