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

ASF GitHub Bot updated SPARK-60607:
-----------------------------------
    Labels: pull-request-available  (was: )

> Decode Arrow day-time intervals as timedelta in the Rust Spark Connect client
> -----------------------------------------------------------------------------
>
>                 Key: SPARK-60607
>                 URL: https://issues.apache.org/jira/browse/SPARK-60607
>             Project: Spark
>          Issue Type: Bug
>          Components: Connect
>    Affects Versions: connect-rust-4.3.0
>            Reporter: DB Tsai
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: connect-rust-4.3.0
>
>
> The Rust Spark Connect client cannot collect non-null Spark 
> DayTimeIntervalType values returned as Arrow Duration(Microsecond). The 
> generic decoder raises:
> Unsupported Arrow type Duration(Microsecond) - cannot convert to Value
> This is an existing correctness gap, reproduced on master-equivalent source 
> 74b8e4125ee8c80f4aad51beabfd37277e39215a (tree identical to 
> c36c846fcb4f22c9995e5de5c69c45ae76a5ad9a), before the input-allocation 
> optimization in SPARK-60606 / 
> https://github.com/apache/spark-connect-rust/pull/109. It is not a regression 
> caused by that PR.
> The benchmark's types-mixed-record-w256-collect-scan fixture contains 16 rows 
> of nested struct columns including a DayTimeIntervalType leaf encoded as 
> pa.duration('us'). Both Rust builds fail all 15 fresh-process samples during 
> warmup in each screening/confirmation phase; the official Python client 
> succeeds and materializes datetime.timedelta values. The frozen fixture 
> includes nulls and populated positive multi-day/microsecond values. No timed 
> Rust CPU/wall/RSS metrics exist for the failed operation.
> Harness and fixture source:
> https://github.com/dbtsai/pyspark-connect-benchmark/tree/23bdf9046815ae615c921b2e6bab827eed00aaae
> The Rust Arrow decoder supports Arrow IntervalYearMonth, IntervalDayTime and 
> IntervalMonthDayNano physical types, but these are different from 
> Duration(Microsecond). There is no DurationMicrosecondArray conversion arm or 
> exact Python timedelta Value materialization. All-null arrays can pass 
> because nulls are handled before the unsupported-type branch.
> Add exact signed-microsecond decoding and Python datetime.timedelta 
> materialization, preserving the logical type and schema. Do not replace 
> durations with integers, strings, zero or null. Cover positive, negative, 
> zero and multi-day values; null and all-null arrays; nested 
> structs/lists/maps; slices/offsets; empty and multiple batches; collect and 
> fully consumed iteration; actual Python timedelta type/value equality. Test 
> signed 64-bit microsecond boundaries and specify range/overflow behavior and 
> supported units without lossy intermediate nanosecond conversion. Preserve 
> the existing Arrow interval conversions.
> SPARK-60573 concerns JVM saturation for large intervals and is related but 
> distinct: this issue is missing Rust support even for small values.



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