L. C. Hsieh created SPARK-60918:
-----------------------------------

             Summary: Make == and hash() of Spark Connect Rust data types match 
PySpark
                 Key: SPARK-60918
                 URL: https://issues.apache.org/jira/browse/SPARK-60918
             Project: Spark
          Issue Type: Bug
          Components: Connect
    Affects Versions: connect-rust-4.3.0
            Reporter: L. C. Hsieh
             Fix For: connect-rust-4.3.0


In the Rust-backed Python drop-in, the data type classes ({{DataType}} and 
every concrete type such as {{LongType}}, {{StructType}}) define no 
{{__eq__}}/{{__hash__}}, so equality falls back to object identity:

{code:python}
LongType() == LongType()                   # False (PySpark: True)
IntegerType() == DataType.fromDDL("int")   # False (PySpark: True)
{code}

{{StructField}} defines {{__eq__}} but no {{__hash__}}, so it is unhashable, 
while PySpark's is hashable.

PySpark defines {{DataType.__eq__}} as {{isinstance(other, self.__class__) and 
self.__dict__ == other.__dict__}} and {{__hash__}} as {{hash(str(self))}}. The 
drop-in should match: compare by the type built from the live fields (a 
StructType mutated with {{add()}} compares by its current fields), keep 
PySpark's rule for pure-Python {{UserDefinedType}} subclasses, and keep 
{{hash}} consistent with {{==}}.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to