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

Mingliang Zhu updated SPARK-60988:
----------------------------------
    Description: 
Follow-up to SPARK-58614 ([PR 
#57815|https://github.com/apache/spark/pull/57815]), covering three performance 
improvements:
 # *Eliminate unnecessary DISTINCT processing.* Extend {{EliminateDistinct}} to 
window expressions for duplicate-insensitive aggregates such as {{{}MIN{}}}, 
{{{}MAX{}}}, {{{}BIT_AND{}}}, {{{}BIT_OR{}}}, and {{{}COLLECT_SET{}}}. Assess 
{{FIRST}} and {{LAST}} separately because of their ordering semantics.

 # *Reduce full-partition position metadata.* Avoid storing 
{{{}firstVisibleIndex{}}}, which is always zero for full-partition frames. 
Retain {{inputIndex}} where needed to restore first-occurrence order after 
sort-based deduplication.

 # *Avoid redundant event sorting on the growing-frame hash path.* Currently, 
every window partition creates an event sorter even when in-memory hash entries 
are already in event order. This introduces substantial initialization and 
allocation overhead for many small partitions. Explore direct ordered replay, 
while preserving correctness under memory pressure and ensuring proper resource 
cleanup. Spill-capable destructive map iteration must not be assumed to 
preserve insertion order.

Add regression tests and benchmarks covering many small partitions, large 
partitions, hash/sort fallback, spills, and collations. Preserve existing 
aggregate semantics, memory-control guarantees, and supported window-frame 
restrictions.
 

  was:
Follow-up to #SPARK-58614 ([PR 
#57815|https://github.com/apache/spark/pull/57815]), covering three performance 
improvements:
 # *Eliminate unnecessary DISTINCT processing.* Extend {{EliminateDistinct}} to 
window expressions for duplicate-insensitive aggregates such as {{{}MIN{}}}, 
{{{}MAX{}}}, {{{}BIT_AND{}}}, {{{}BIT_OR{}}}, and {{{}COLLECT_SET{}}}. Assess 
{{FIRST}} and {{LAST}} separately because of their ordering semantics.

 # *Reduce full-partition position metadata.* Avoid storing 
{{{}firstVisibleIndex{}}}, which is always zero for full-partition frames. 
Retain {{inputIndex}} where needed to restore first-occurrence order after 
sort-based deduplication.

 # *Avoid redundant event sorting on the growing-frame hash path.* Currently, 
every window partition creates an event sorter even when in-memory hash entries 
are already in event order. This introduces substantial initialization and 
allocation overhead for many small partitions. Explore direct ordered replay, 
while preserving correctness under memory pressure and ensuring proper resource 
cleanup. Spill-capable destructive map iteration must not be assumed to 
preserve insertion order.

Add regression tests and benchmarks covering many small partitions, large 
partitions, hash/sort fallback, spills, and collations. Preserve existing 
aggregate semantics, memory-control guarantees, and supported window-frame 
restrictions.
 


> Optimize DISTINCT window aggregate execution
> --------------------------------------------
>
>                 Key: SPARK-60988
>                 URL: https://issues.apache.org/jira/browse/SPARK-60988
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions: 4.4.0
>            Reporter: Mingliang Zhu
>            Priority: Major
>
> Follow-up to SPARK-58614 ([PR 
> #57815|https://github.com/apache/spark/pull/57815]), covering three 
> performance improvements:
>  # *Eliminate unnecessary DISTINCT processing.* Extend {{EliminateDistinct}} 
> to window expressions for duplicate-insensitive aggregates such as 
> {{{}MIN{}}}, {{{}MAX{}}}, {{{}BIT_AND{}}}, {{{}BIT_OR{}}}, and 
> {{{}COLLECT_SET{}}}. Assess {{FIRST}} and {{LAST}} separately because of 
> their ordering semantics.
>  # *Reduce full-partition position metadata.* Avoid storing 
> {{{}firstVisibleIndex{}}}, which is always zero for full-partition frames. 
> Retain {{inputIndex}} where needed to restore first-occurrence order after 
> sort-based deduplication.
>  # *Avoid redundant event sorting on the growing-frame hash path.* Currently, 
> every window partition creates an event sorter even when in-memory hash 
> entries are already in event order. This introduces substantial 
> initialization and allocation overhead for many small partitions. Explore 
> direct ordered replay, while preserving correctness under memory pressure and 
> ensuring proper resource cleanup. Spill-capable destructive map iteration 
> must not be assumed to preserve insertion order.
> Add regression tests and benchmarks covering many small partitions, large 
> partitions, hash/sort fallback, spills, and collations. Preserve existing 
> aggregate semantics, memory-control guarantees, and supported window-frame 
> restrictions.
>  



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