[ 
https://issues.apache.org/jira/browse/SPARK-60661?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hyukjin Kwon resolved SPARK-60661.
----------------------------------
    Resolution: Fixed

Issue resolved by pull request 111
[https://github.com/apache/spark-connect-rust/pull/111]

> Avoid generic detection for exact built-in numbers in Spark Connect Rust
> ------------------------------------------------------------------------
>
>                 Key: SPARK-60661
>                 URL: https://issues.apache.org/jira/browse/SPARK-60661
>             Project: Spark
>          Issue Type: Improvement
>          Components: Connect, PySpark
>    Affects Versions: connect-rust-4.2.0, connect-rust-4.3.0
>            Reporter: DB Tsai
>            Assignee: DB Tsai
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: connect-rust-4.3.0
>
>
> Current scope after the master rebase
> In pandas row conversion and other generic callers of py_to_value, exact 
> built-in int and float values still pass through generic Decimal and 
> numeric-detection work. Dispatch these exact types directly while retaining 
> the existing fallback for other objects.
> The remaining scope is the pandas row path and other py_to_value callers. The 
> rewritten local createDataFrame inference and conversion path already 
> dispatches built-in numbers directly, so this issue does not restore or 
> optimize that older local-input path.
> Preserve behavior for bools, subclasses, Decimal, custom numeric protocols, 
> overflowing integers, nested values, and special floating-point values, 
> including NaN, infinities, and signed zero. Keep current local-input 
> inference and error behavior intact.
> Regression tests should use object-backed pandas inputs where needed to 
> exercise the remaining generic path. Rebenchmark the current patch against 
> current master before claiming CPU, wall-time, or memory improvements; the 
> historical local tuple and Row results do not validate the rebased scope. 
> Live-Spark parity and current CI remain part of validation.
> Proposed patch: https://github.com/apache/spark-connect-rust/pull/111
> Historical pre-rebase description and validation
> The text below records the original proposal and its historical measurements 
> and validation. It does not validate or measure the rebased patch. The 
> current scope above takes precedence.
> Numeric Python values in spark-connect-rust currently pass through generic 
> bool/Decimal detection in py_to_value. Avoid this overhead for exact built-in 
> int and float values by using cast_exact before the generic path. Integers 
> that fit i64 convert directly to Value::Long; exact floats convert to 
> Value::Double. Booleans, subclasses, custom conversion protocols, and 
> overflowing integers retain the existing fallback behavior. No behavior or 
> API change is intended.
> Add regression coverage for values and types, float bit preservation 
> (including NaN payloads and signed zero), subclasses, Decimal, conversion 
> protocols, and nested inputs. Integer overflow coercion remains a separate 
> existing PySpark parity gap.
> Original-patch confirmation medians versus c36c846 on macOS arm64 / Python 
> 3.12 showed CPU reductions of 74.39% for 10,000 x 32 tuples, 41.92% for 
> 10,000 x 3 tuples, and 37.80% for numeric arrays. These measurements include 
> conversion and IPC serialization. The cast_exact cleanup has not been 
> rebenchmarked; full CPU/memory gates remain unmet because of known 
> SPARK-60607 failures and inconclusive regression bounds.
> The PR reports 289 offline Python tests passing with an unchanged 108-class 
> API snapshot, plus 410 Rust unit/golden/sharing checks. Full live 
> Spark/official-suite parity remains pending.
> Pull request: https://github.com/apache/spark-connect-rust/pull/111
> Frozen benchmark harness: 
> https://github.com/dbtsai/pyspark-connect-benchmark/tree/23bdf9046815ae615c921b2e6bab827eed00aaae



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