DB Tsai created SPARK-60641:
-------------------------------

             Summary: Accept Byte and Short Row values for Float and Double 
schemas in Spark Connect Rust
                 Key: SPARK-60641
                 URL: https://issues.apache.org/jira/browse/SPARK-60641
             Project: Spark
          Issue Type: Bug
          Components: Connect
    Affects Versions: connect-rust-4.3.0
            Reporter: DB Tsai
             Fix For: connect-rust-4.3.0


h2. Problem

Existing local-input conversion gap identified while reviewing 
https://github.com/apache/spark-connect-rust/pull/109 (SPARK-60606); not 
introduced by that PR.

In crates/spark-connect/src/session.rs, values_to_arrow's float_prim! accepts 
Value::Float, Double, Integer, Long, and Null, but not Byte or Short. 
Consequently a Rust Row containing a small integer (for example a value decoded 
from a tinyint/smallint column) fails with "Type mismatch in row data" when 
create_dataframe is given a Float or Double field. Wider Integer/Long inputs 
already succeed for the same declared targets. The removed coerce_value helper 
also lacked Byte/Short-to-float conversion, so retaining that pass would not 
fix the gap.

h2. Minimal reproduction

Construct Row::new(vec!["n".into()], vec![Value::Short(7)]) and pass it to 
SparkSession::create_dataframe with a Struct schema containing a nullable Float 
field named n. Local Arrow conversion currently returns a type mismatch before 
any remote execution. Repeat with Value::Byte(7) and a Double target; it fails 
for the same reason.

h2. Expected behavior

Handle Byte and Short consistently with the already-supported Integer and Long 
sources for Float and Double targets, using the encoder's existing numeric cast 
policy. This expectation concerns the native Rust Row conversion API; do not 
infer Python explicit-schema type-verification rules from the Rust behavior.

h2. Acceptance criteria

* Cover Byte and Short inputs for both Float and Double targets, including 
zero, negative values, type boundaries, and nulls. These integer ranges are 
exactly representable in both floating formats.
* Exercise the full input-to-IPC path and verify output Arrow types and values.
* Cover nested array, map-value, and struct leaves, which recurse through the 
same encoder.
* Retain rejection of incompatible nonnumeric inputs and existing width/schema 
error ordering.
* Include a live round trip of collected tinyint/smallint Rows into a new 
floating-schema DataFrame when a Spark server is available. Run Rust and 
relevant parity checks.

Generated with OpenAI Codex.




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