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

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

> Transpilation: category inference is quadratic in expression length
> -------------------------------------------------------------------
>
>                 Key: SPARK-59028
>                 URL: https://issues.apache.org/jira/browse/SPARK-59028
>             Project: Spark
>          Issue Type: Sub-task
>          Components: PySpark, SQL
>    Affects Versions: 4.3.0
>            Reporter: Holden Karau
>            Priority: Minor
>              Labels: pull-request-available
>
> `_convert_chunk`'s `BinOp` arm calls `_category` on the left and right 
> subtrees,
> then recurses into `_convert_chunk` on each — which calls `_category` over 
> those
> same subtrees again, one level down. Each level walks the whole subtree and 
> the
> result is discarded on descent, so inference is quadratic in expression 
> length.
> Measured on the branch, replaying that call pattern against the unmodified
> `_category`: an `a0 + a1 + ... + aN` chain with N=160 operators produced 25760
> `_category` calls, i.e. calls/N² = 1.006. The same double-call pattern recurs 
> at the
> comparison site, so a UDF mixing a long arithmetic chain with a comparison 
> compounds.
> This is driver-side, inside query planning, once per `_build_transpiled` — and
> `_build_transpiled` now runs per `judf` build and per read of the `transpiled`
> property, so it is paid more often than it used to be.
> **Proposed fix:** memoize `_category` per `id(node)` for the duration of one 
> combo
> (categories depend on `self._param_categories`, which changes per combo), or 
> have
> `_convert_chunk` return `(Column, category)` so the separate pass disappears. 
> The
> second is the better shape and a bigger change.



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