Skip to content

Commit 62df32e

Browse files
vegarstialamb
andauthored
Add benchmark for casting to RunEndEncoded (REE) (#8710)
Closes #8709. Adds bench `cast_ree` which can be run with `cargo bench --bench cast_ree`. --------- Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
1 parent 7a92be5 commit 62df32e

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

arrow-cast/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,4 @@ harness = false
7575
[[bench]]
7676
name = "parse_decimal"
7777
harness = false
78+

arrow/benches/cast_kernels.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,46 @@ fn add_benchmark(c: &mut Criterion) {
359359
c.bench_function("cast binary view to string view", |b| {
360360
b.iter(|| cast_array(&binary_view_array, DataType::Utf8View))
361361
});
362+
363+
c.bench_function("cast string single run to ree<int32>", |b| {
364+
let source_array = StringArray::from(vec!["a"; 8192]);
365+
let array_ref = Arc::new(source_array) as ArrayRef;
366+
let target_type = DataType::RunEndEncoded(
367+
Arc::new(Field::new("run_ends", DataType::Int32, false)),
368+
Arc::new(Field::new("values", DataType::Utf8, true)),
369+
);
370+
b.iter(|| cast(&array_ref, &target_type).unwrap());
371+
});
372+
373+
c.bench_function("cast runs of 10 string to ree<int32>", |b| {
374+
let source_array: Int32Array = (0..8192).map(|i| i / 10).collect();
375+
let array_ref = Arc::new(source_array) as ArrayRef;
376+
let target_type = DataType::RunEndEncoded(
377+
Arc::new(Field::new("run_ends", DataType::Int32, false)),
378+
Arc::new(Field::new("values", DataType::Int32, true)),
379+
);
380+
b.iter(|| cast(&array_ref, &target_type).unwrap());
381+
});
382+
383+
c.bench_function("cast runs of 1000 int32s to ree<int32>", |b| {
384+
let source_array: Int32Array = (0..8192).map(|i| i / 1000).collect();
385+
let array_ref = Arc::new(source_array) as ArrayRef;
386+
let target_type = DataType::RunEndEncoded(
387+
Arc::new(Field::new("run_ends", DataType::Int32, false)),
388+
Arc::new(Field::new("values", DataType::Int32, true)),
389+
);
390+
b.iter(|| cast(&array_ref, &target_type).unwrap());
391+
});
392+
393+
c.bench_function("cast no runs of int32s to ree<int32>", |b| {
394+
let source_array: Int32Array = (0..8192).collect();
395+
let array_ref = Arc::new(source_array) as ArrayRef;
396+
let target_type = DataType::RunEndEncoded(
397+
Arc::new(Field::new("run_ends", DataType::Int32, false)),
398+
Arc::new(Field::new("values", DataType::Int32, true)),
399+
);
400+
b.iter(|| cast(&array_ref, &target_type).unwrap());
401+
});
362402
}
363403

364404
criterion_group!(benches, add_benchmark);

0 commit comments

Comments
 (0)