Tim Meehan created SPARK-61286:
----------------------------------

             Summary: Send date, timestamp and decimal pivot values as typed 
literals in GroupedData::pivot of the Rust API
                 Key: SPARK-61286
                 URL: https://issues.apache.org/jira/browse/SPARK-61286
             Project: Spark
          Issue Type: Bug
          Components: Connect
    Affects Versions: connect-rust-4.3.0
            Reporter: Tim Meehan


GroupedData::pivot of the Rust API makes a literal of each value with 
value_to_lit_expr (crates/spark-connect/src/group.rs:17). A boolean, a number, 
a string or a day-time interval becomes a typed literal, but any other Value, 
such as Value::Date, Value::Timestamp or Value::Decimal, becomes the string of 
its Debug format (group.rs:30). Value::Date(19723), 2024-01-01, is sent as the 
string "Date(19723)".

{code:rust}
// df has an int column k and a date column d.
let counted = df
    .group_by(vec![col("k")])
    .pivot(col("d"), Some(vec![Value::Date(19723)]))?
    .count();
{code}

The server casts the string to the type of the pivot column. Against an OSS 
Spark 4.3.0 Connect server on loopback, with the pivot value "Date(19723)" on a 
date column:
* spark.sql.ansi.enabled true, the default: the query fails with 
\[CAST_INVALID_INPUT\] The value 'Date(19723)' of the type "STRING" cannot be 
cast to "DATE" because it is malformed.
* spark.sql.ansi.enabled false: a column named Date(19723) that is null in 
every row, without an error.

Sent as a date literal, the value would match the rows of 2024-01-01. PySpark's 
pivot rejects date, timestamp and Decimal values with NOT_EXPECTED_TYPE, and so 
has the Python client of spark-connect-rust since SPARK-61046, but the Rust API 
takes them. At spark-connect-rust master 8768cc4.



--
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