⚡ Bolt: Defer take in RepartitionExec to parallelize execution
#246
+98
−56
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch improves the performance of
RepartitionExecfor hash-based repartitioning by deferring the materialization ofRecordBatches. It introduces aPartitionedBatch::Indexedvariant, which contains a sharedArc<RecordBatch>and aPrimitiveArray<UInt32Type>of indices. The producer now sends this lightweight enum over the channels, and thetakeoperation is performed by the consumer tasks. This parallelizes thetakeoperation across all output partitions, improving throughput. A memory accounting issue was also fixed by passing the estimated size of theIndexedbatch along with the batch, ensuring that the memory pool'sgrowandshrinkoperations are symmetric.PR created automatically by Jules for task 14803450406354175091 started by @Dandandan