Skip to content

perf(arrow): move partition key into group map instead of cloning per row - #3159

Open
anoopj wants to merge 1 commit into
apache:mainfrom
anoopj:perf-partition-split-key-clone
Open

perf(arrow): move partition key into group map instead of cloning per row#3159
anoopj wants to merge 1 commit into
apache:mainfrom
anoopj:perf-partition-split-key-clone

Conversation

@anoopj

@anoopj anoopj commented Sep 6, 2026

Copy link
Copy Markdown
Member

What changes are included in this PR?

RecordBatchPartitionSplitter::split groups a batch's rows by partition value into a HashMap. It iterated the partition Structs by reference and cloned each one into the entry key, allocating a fresh Struct (and, for string partitions, copying the string) for every row even though partition_structs is never used after the loop.

Consume partition_structs with into_iter() and move each Struct into the entry, dropping the per-row clone.

Behavior is unchanged: grouping is by key equality, unaffected by whether the key is moved or cloned. On a 100k-row string-partitioned batch, split() drops from ~430 to ~396 ns/row (~8%); numeric partitions see a smaller win.

Are these changes tested?

Existing tests

… row

RecordBatchPartitionSplitter::split groups a batch's rows by partition
value into a HashMap. It iterated the partition Structs by reference and
cloned each one into the entry key, allocating a fresh Struct (and, for
string partitions, copying the string) for every row  even though
partition_structs is never used after the loop.

Consume partition_structs with into_iter() and move each Struct into the
entry, dropping the per-row clone.

Behavior is unchanged: grouping is by key equality, unaffected by whether
the key is moved or cloned. On a 100k-row string-partitioned batch,
split() drops from ~430 to ~396 ns/row (~8%); numeric partitions see a
smaller win.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant