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

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

> Extract a shared Python and Arrow converter for Spark Connect Rust
> ------------------------------------------------------------------
>
>                 Key: SPARK-60586
>                 URL: https://issues.apache.org/jira/browse/SPARK-60586
>             Project: Spark
>          Issue Type: Improvement
>          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
>
>
> h2. Summary
> Extract a standalone spark-python-arrow Rust crate for Python-facing Spark 
> clients and workers, and adopt it in pyspark-rs. This provides one reusable, 
> versioned implementation of Arrow/PyArrow interoperability and Python 
> scalar/UDF value conversions without adding Python dependencies to the Rust 
> client core.
> Draft implementation: https://github.com/apache/spark-connect-rust/pull/103
> h2. Scope
> * Share compatible, already-decoded Arrow value and offset buffers through 
> the Arrow C Data Interface instead of reserializing them to IPC for the 
> Python client's toArrow() handoff.
> * Provide reusable schema, type, array, and record-batch import/export with 
> explicit ownership and lifetime contracts.
> * Share scalar materialization and UDF input/result conversion policy while 
> retaining caller-owned Python classes and fallback callbacks.
> * Keep transport, worker execution, session state, and downstream dependency 
> migration outside this crate.
> h2. Zero-copy boundary
> Zero-copy describes the compatible Rust Arrow/PyArrow buffer handoff, not the 
> entire pipeline. Network/IPC decoding, schema and Python object allocation, 
> scalar/row materialization, UDF result construction, and pandas conversion 
> may allocate or copy. Nullable slices can require validity-bitmap 
> realignment. Embedded NUL field names or timezones use an IPC compatibility 
> fallback for table export.
> h2. Acceptance criteria
> * Verify shared value-buffer addresses and correct release/lifetime behavior, 
> including sliced arrays, nested fields, empty results, and zero-column 
> batches.
> * Preserve sorted-map flags on export and ordered-dictionary flags on import, 
> including nested fields. Review of the current draft identified losses in 
> these two cases.
> * Preserve dictionary-value extension identity, or reject unsupported inputs 
> explicitly instead of silently lowering them to their storage type.
> * Preserve scalar/UDF conversion semantics, fallback behavior, mutable-result 
> handling, and conversion-error ordering.
> * Document copying paths and tested dependency versions accurately.
> h2. Validation status
> At draft head 234353b5e0350587d736ecdd21e1c90e97c0fd7f, 32 standalone 
> converter tests and 17 client handoff tests pass locally with PyO3 0.28.3 and 
> PyArrow 26. The three schema-preservation cases above were reproduced 
> separately and still need fixes and regression coverage. Full official 
> parity, PyO3 0.29, and downstream worker integration remain unverified; this 
> issue does not claim those migrations or validations are complete.



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