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

Mark Jarvin updated SPARK-60268:
--------------------------------
    Priority: Minor  (was: Major)

> Fail window partitions larger than Int.MaxValue rows while buffering instead 
> of after
> -------------------------------------------------------------------------------------
>
>                 Key: SPARK-60268
>                 URL: https://issues.apache.org/jira/browse/SPARK-60268
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions: 5.0.0
>            Reporter: Mark Jarvin
>            Priority: Minor
>
> h2. Summary
> Since SPARK-59929, window execution rejects a partition with more than 
> {{Int.MaxValue}} rows when any of its frames cannot handle it, using error 
> {{WINDOW_FUNCTION_PARTITION_SIZE_EXCEEDS_LIMIT}}. The check 
> ({{WindowEvaluatorFactoryBase.checkPartitionSizeLimit}}) runs only after the 
> whole partition has been read and buffered/spilled, in 
> {{WindowEvaluatorFactory.fetchNextPartition}} and 
> {{ArrowWindowPythonEvaluatorFactory.fetchNextPartition}}.
> So a query that is going to fail still reads and spills the entire oversized 
> partition first. The reproduction in SPARK-59929 took about 30 minutes over 
> 2.2B rows on one core, plus the disk used by the spill, before the error 
> appeared.
> h2. Proposal
> When any frame does not support large partitions, check the buffered row 
> count while rows are being added (one {{Long}} comparison per row) and throw 
> as soon as it exceeds {{Int.MaxValue}}. Frames that do support large 
> partitions (LEAD/LAG and NTH_VALUE over the whole partition, see SPARK-59941) 
> must keep buffering.
> Needs a test with a stubbed or small buffer that reports a large length, 
> since a real oversized partition is impractical in a unit test.
> Depends on SPARK-59941 (introduces 
> {{WindowFunctionFrame.supportsLargePartition}}).



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