Skip to content

Commit 4460c17

Browse files
committed
Add benchmark for array_reverse of list view
1 parent b52a81d commit 4460c17

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

datafusion/functions-nested/benches/array_expression.rs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,22 @@
1919
extern crate criterion;
2020
extern crate arrow;
2121

22+
use std::sync::Arc;
23+
2224
use crate::criterion::Criterion;
25+
use arrow::{
26+
array::{Int32Array, ListArray, ListViewArray},
27+
buffer::{OffsetBuffer, ScalarBuffer},
28+
datatypes::{DataType, Field},
29+
};
2330
use datafusion_expr::lit;
2431
use datafusion_functions_nested::expr_fn::{array_replace_all, make_array};
32+
use datafusion_functions_nested::reverse::array_reverse_inner;
2533
use std::hint::black_box;
2634

2735
fn criterion_benchmark(c: &mut Criterion) {
2836
// Construct large arrays for benchmarking
29-
30-
let array_len = 100000000;
31-
37+
let array_len = 100000;
3238
let array = (0..array_len).map(|_| lit(2_i64)).collect::<Vec<_>>();
3339
let list_array = make_array(vec![make_array(array); 3]);
3440
let from_array = make_array(vec![lit(2_i64); 3]);
@@ -37,7 +43,6 @@ fn criterion_benchmark(c: &mut Criterion) {
3743
let expected_array = list_array.clone();
3844

3945
// Benchmark array functions
40-
4146
c.bench_function("array_replace", |b| {
4247
b.iter(|| {
4348
assert_eq!(
@@ -50,6 +55,38 @@ fn criterion_benchmark(c: &mut Criterion) {
5055
)
5156
})
5257
});
58+
59+
// Construct large arrays for reverse
60+
let step_size: usize = 1000;
61+
let offsets: Vec<i32> = (0..array_len as i32)
62+
.step_by(step_size.try_into().unwrap())
63+
.collect();
64+
let offsets = ScalarBuffer::from(offsets);
65+
let sizes: Vec<i32> = vec![step_size as i32; array_len / step_size as usize];
66+
let values = (0..array_len as i32).collect::<Vec<i32>>();
67+
68+
// Reverse list array
69+
let list_array = ListArray::new(
70+
Arc::new(Field::new("a", DataType::Int32, false)),
71+
OffsetBuffer::new(offsets.clone()),
72+
Arc::new(Int32Array::from(values.clone())),
73+
None,
74+
);
75+
c.bench_function("array_reverse_list", |b| {
76+
b.iter(|| array_reverse_inner(&[Arc::new(list_array.clone())]))
77+
});
78+
79+
// Reverse list view array
80+
let list_view_array = ListViewArray::new(
81+
Arc::new(Field::new("a", DataType::Int32, false)),
82+
offsets,
83+
ScalarBuffer::from(sizes),
84+
Arc::new(Int32Array::from(values)),
85+
None,
86+
);
87+
c.bench_function("array_reverse_list_view", |b| {
88+
b.iter(|| array_reverse_inner(&[Arc::new(list_view_array.clone())]))
89+
});
5390
}
5491

5592
criterion_group!(benches, criterion_benchmark);

0 commit comments

Comments
 (0)