@@ -350,6 +350,11 @@ def save_global(self, obj, name=None, pack=struct.pack):
350350 if new_override :
351351 d ['__new__' ] = obj .__new__
352352
353+ # workaround for namedtuple (hijacked by PySpark)
354+ if getattr (obj , '_is_namedtuple_' , False ):
355+ self .save_reduce (_load_namedtuple , (obj .__name__ , obj ._fields ))
356+ return
357+
353358 self .save (_load_class )
354359 self .save_reduce (typ , (obj .__name__ , obj .__bases__ , {"__doc__" : obj .__doc__ }), obj = obj )
355360 d .pop ('__doc__' , None )
@@ -382,7 +387,7 @@ def save_instancemethod(self, obj):
382387 self .save_reduce (types .MethodType , (obj .__func__ , obj .__self__ ), obj = obj )
383388 else :
384389 self .save_reduce (types .MethodType , (obj .__func__ , obj .__self__ , obj .__self__ .__class__ ),
385- obj = obj )
390+ obj = obj )
386391 dispatch [types .MethodType ] = save_instancemethod
387392
388393 def save_inst (self , obj ):
@@ -744,6 +749,14 @@ def _load_class(cls, d):
744749 return cls
745750
746751
752+ def _load_namedtuple (name , fields ):
753+ """
754+ Loads a class generated by namedtuple
755+ """
756+ from collections import namedtuple
757+ return namedtuple (name , fields )
758+
759+
747760"""Constructors for 3rd party libraries
748761Note: These can never be renamed due to client compatibility issues"""
749762
0 commit comments