diff --git a/arrow-cast/Cargo.toml b/arrow-cast/Cargo.toml index f3309783fb38..fb5ad1af3d3a 100644 --- a/arrow-cast/Cargo.toml +++ b/arrow-cast/Cargo.toml @@ -75,3 +75,4 @@ harness = false [[bench]] name = "parse_decimal" harness = false + diff --git a/arrow/benches/cast_kernels.rs b/arrow/benches/cast_kernels.rs index a54529c8d108..040c118a1e83 100644 --- a/arrow/benches/cast_kernels.rs +++ b/arrow/benches/cast_kernels.rs @@ -359,6 +359,46 @@ fn add_benchmark(c: &mut Criterion) { c.bench_function("cast binary view to string view", |b| { b.iter(|| cast_array(&binary_view_array, DataType::Utf8View)) }); + + c.bench_function("cast string single run to ree", |b| { + let source_array = StringArray::from(vec!["a"; 8192]); + let array_ref = Arc::new(source_array) as ArrayRef; + let target_type = DataType::RunEndEncoded( + Arc::new(Field::new("run_ends", DataType::Int32, false)), + Arc::new(Field::new("values", DataType::Utf8, true)), + ); + b.iter(|| cast(&array_ref, &target_type).unwrap()); + }); + + c.bench_function("cast runs of 10 string to ree", |b| { + let source_array: Int32Array = (0..8192).map(|i| i / 10).collect(); + let array_ref = Arc::new(source_array) as ArrayRef; + let target_type = DataType::RunEndEncoded( + Arc::new(Field::new("run_ends", DataType::Int32, false)), + Arc::new(Field::new("values", DataType::Int32, true)), + ); + b.iter(|| cast(&array_ref, &target_type).unwrap()); + }); + + c.bench_function("cast runs of 1000 int32s to ree", |b| { + let source_array: Int32Array = (0..8192).map(|i| i / 1000).collect(); + let array_ref = Arc::new(source_array) as ArrayRef; + let target_type = DataType::RunEndEncoded( + Arc::new(Field::new("run_ends", DataType::Int32, false)), + Arc::new(Field::new("values", DataType::Int32, true)), + ); + b.iter(|| cast(&array_ref, &target_type).unwrap()); + }); + + c.bench_function("cast no runs of int32s to ree", |b| { + let source_array: Int32Array = (0..8192).collect(); + let array_ref = Arc::new(source_array) as ArrayRef; + let target_type = DataType::RunEndEncoded( + Arc::new(Field::new("run_ends", DataType::Int32, false)), + Arc::new(Field::new("values", DataType::Int32, true)), + ); + b.iter(|| cast(&array_ref, &target_type).unwrap()); + }); } criterion_group!(benches, add_benchmark);