Skip to content

Commit aa69a72

Browse files
authored
Update types.py
1 parent 4b88393 commit aa69a72

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

python/pyspark/sql/types.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)