diff --git a/python/pyspark/sql/types.py b/python/pyspark/sql/types.py index 920cf009f599d..3f5907beb5902 100644 --- a/python/pyspark/sql/types.py +++ b/python/pyspark/sql/types.py @@ -410,6 +410,24 @@ def __init__(self, name, dataType, nullable=True, metadata=None): self.dataType = dataType self.nullable = nullable self.metadata = metadata or {} + self.needConversion = dataType.needConversion + self.toInternal = dataType.toInternal + self.fromInternal = dataType.fromInternal + + def __getstate__(self): + """Return state values to be pickled.""" + return (self.name, self.dataType, self.nullable, self.metadata) + + def __setstate__(self, state): + """Restore state from the unpickled state values.""" + name, dataType, nullable, metadata = state + self.name = name + self.dataType = dataType + self.nullable = nullable + self.metadata = metadata + self.needConversion = dataType.needConversion + self.toInternal = dataType.toInternal + self.fromInternal = dataType.fromInternal def simpleString(self): return '%s:%s' % (self.name, self.dataType.simpleString()) @@ -431,15 +449,6 @@ def fromJson(cls, json): json["nullable"], json["metadata"]) - def needConversion(self): - return self.dataType.needConversion() - - def toInternal(self, obj): - return self.dataType.toInternal(obj) - - def fromInternal(self, obj): - return self.dataType.fromInternal(obj) - def typeName(self): raise TypeError( "StructField does not have typeName. "