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

L. C. Hsieh resolved SPARK-58050.
---------------------------------
    Resolution: Won't Do

Closing as Won't Do. Re-measurement showed the bulk output paths never engage 
for realistic types (the identity-children guard excludes string-bearing types 
due to the str() coercion contract, and for identity children the existing 
converter is already None), and the previously cited end-to-end gains were 
measurement artifacts not attributable to this change. See 
https://github.com/apache/spark/pull/57137#issuecomment-4931247811 for details.

> Bulk-assemble Arrow Python UDF results
> --------------------------------------
>
>                 Key: SPARK-58050
>                 URL: https://issues.apache.org/jira/browse/SPARK-58050
>             Project: Spark
>          Issue Type: Improvement
>          Components: PySpark
>    Affects Versions: 5.0.0
>            Reporter: L. C. Hsieh
>            Priority: Major
>              Labels: pull-request-available
>
> Follow-up of SPARK-58019/SPARK-58023/SPARK-58024, scoped down per review 
> discussion to the output side only.
> The Arrow Python UDF worker converts every UDF result through a per-row 
> Python converter (defensive list copies for arrays, dict to entry-list for 
> maps, Row/dict to dict for structs) before {{pa.array}}. These conversions 
> are Spark's own, independent of PyArrow's conversion performance, and use no 
> NumPy; {{pa.array}} itself is cheap.
> Add {{LocalDataToArrowConversion._create_results_to_arrow}}: when the 
> element/field/value converters are identity, results are assembled in bulk - 
> arrays pass returned lists to {{pa.array}} directly, map results pass dicts 
> directly, struct results (Rows/tuples) are transposed and assembled via 
> {{StructArray.from_arrays}} with a null mask. Any shape/validation mismatch 
> falls back to the per-row path, preserving error behavior.
> Microbenchmarks (400k rows, identical outputs): array<string> 7.5x, map 4.2x, 
> struct 4.0x. End-to-end (6.4M rows): array<string> 2.39s -> 1.84s. Extending 
> the bulk path to validation-only child converters (e.g. integers) is possible 
> follow-up.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to