sunchao commented on code in PR #6430:
URL: https://github.com/apache/datafusion-comet/pull/6430#discussion_r4178661396


##########
native/shuffle/src/partitioners/partitioned_batch_iterator.rs:
##########
@@ -239,6 +262,51 @@ impl Iterator for RowIterator<'_> {
     }
 }
 
+/// Gather scattered Boolean state without rebuilding Arrow's MutableArrayData
+/// descriptors for every reducer. Clustered selections retain Arrow's range 
copies.
+/// The producer supplies matching immutable batches and valid row indices, 
just as
+/// for the ordinary Arrow interleave path.

Review Comment:
   Filed apache/arrow-rs#11379 and linked it from the helper’s doc comment in 
137d3c0. The issue covers recursive/nested Boolean use, sliced offsets, nulls, 
bounds/error behavior, and measuring clustered selections before adopting the 
specialization. I checked arrow-rs main’s dispatch while filing it: Boolean 
still takes the MutableArrayData fallback.



##########
native/shuffle/src/partitioners/partitioned_batch_iterator.rs:
##########
@@ -239,6 +262,51 @@ impl Iterator for RowIterator<'_> {
     }
 }
 
+/// Gather scattered Boolean state without rebuilding Arrow's MutableArrayData
+/// descriptors for every reducer. Clustered selections retain Arrow's range 
copies.
+/// The producer supplies matching immutable batches and valid row indices, 
just as
+/// for the ordinary Arrow interleave path.
+fn interleave_shuffle_batches(
+    batches: &[&RecordBatch],
+    indices: &[(usize, usize)],
+) -> Result<RecordBatch, ArrowError> {
+    let schema = batches[0].schema_ref();
+    // Arrow already copies clustered bitmap ranges efficiently. A false 
positive only
+    // selects that existing path; the probe is not used to copy or validate 
indices.
+    // A four-row stride detects eight-row runs regardless of their starting 
alignment.
+    let clustered = (0..indices.len().saturating_sub(4)).step_by(4).any(|i| {
+        indices[i].0 == indices[i + 4].0 && indices[i].1.checked_add(4) == 
Some(indices[i + 4].1)
+    });

Review Comment:
   Raised the probe stride and distance from 4 to 32 in 137d3c0, so short hash 
runs retain the direct gather while every 64-row contiguous run is detected 
regardless of alignment. Added a probe-only test that checks short-run 
dispatch, all 32 alignments, empty/short selections and checked-add overflow. 
It passes in a standalone execution of the exact helper/test; full crate 
validation is pending.
   
   Also added the requested writer benchmark matrix: decimal SUM state, eight 
nullable Booleans and Int64 control, each at 4/200 partitions and 
scattered/64-row-clustered keys, with 100 × 8,192 rows, LZ4 and no spill. 
Current-head timings have not been collected, so the description removes the 
old eight-row-probe timing table rather than attributing those results to this 
revision.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to