@@ -483,7 +483,8 @@ def __init__(self, fields=None):
483483 self .names = [f .name for f in fields ]
484484 assert all (isinstance (f , StructField ) for f in fields ),\
485485 "fields should be a list of StructField"
486- self ._needSerializeAnyField = any (f .needConversion () for f in self )
486+ self ._needConversion = [f .needConversion () for f in self ]
487+ self ._needSerializeAnyField = any (self ._needConversion )
487488
488489 def add (self , field , data_type = None , nullable = True , metadata = None ):
489490 """
@@ -528,7 +529,8 @@ def add(self, field, data_type=None, nullable=True, metadata=None):
528529 data_type_f = data_type
529530 self .fields .append (StructField (field , data_type_f , nullable , metadata ))
530531 self .names .append (field )
531- self ._needSerializeAnyField = any (f .needConversion () for f in self )
532+ self ._needConversion = [f .needConversion () for f in self ]
533+ self ._needSerializeAnyField = any (self ._needConversion )
532534 return self
533535
534536 def __iter__ (self ):
@@ -619,7 +621,7 @@ def fromInternal(self, obj):
619621 # it's already converted by pickler
620622 return obj
621623 if self ._needSerializeAnyField :
622- values = [f .fromInternal (v ) for f , v in zip (self .fields , obj )]
624+ values = [f .fromInternal (v ) if n else v for f , v , n in zip (self .fields , obj , self . _needConversion )]
623625 else :
624626 values = obj
625627 return _create_row (self .names , values )
0 commit comments