Details
-
Improvement
-
Status: In Progress
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
Description
A logical Limit is performed actually by two physical operations LocalLimit and GlobalLimit.
In most of time, before GlobalLimit, we will perform a shuffle exchange to shuffle data to single partition. When the limit number is very big, we shuffle a lot of data to a single partition and significantly reduce parallelism, except for the cost of shuffling.
This change tries to perform GlobalLimit without shuffling data to single partition. Instead, we perform the map stage of the shuffling and collect the statistics of the number of rows in each partition. Shuffled data are actually all retrieved locally without from remote executors.
Once we get the number of output rows in each partition, we only take the required number of rows from the locally shuffled data.