This is an automated email from the ASF dual-hosted git repository.
tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new 5e2b4c7ba Simplify DictionaryBuilder constructors (#2684) (#2054)
(#2685)
5e2b4c7ba is described below
commit 5e2b4c7ba85a44791e6a72a908b2296be02dd019
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Thu Sep 8 22:16:26 2022 +0100
Simplify DictionaryBuilder constructors (#2684) (#2054) (#2685)
* Simplify DictionaryBuilder constructors (#2684) (#2054)
* Apply suggestions from code review
Co-authored-by: Liang-Chi Hsieh <[email protected]>
Co-authored-by: Liang-Chi Hsieh <[email protected]>
---
arrow/benches/string_dictionary_builder.rs | 8 +--
arrow/src/array/array_dictionary.rs | 22 +++-----
.../array/builder/primitive_dictionary_builder.rs | 47 ++++++++++++------
.../src/array/builder/string_dictionary_builder.rs | 56 ++++++++++++++-------
arrow/src/array/equal/mod.rs | 8 +--
arrow/src/array/transform/mod.rs | 8 +--
arrow/src/compute/kernels/arithmetic.rs | 58 ++++++----------------
arrow/src/compute/kernels/arity.rs | 12 ++---
arrow/src/compute/kernels/cast.rs | 26 +++-------
arrow/src/compute/kernels/comparison.rs | 54 +++++++-------------
arrow/src/compute/kernels/take.rs | 5 +-
arrow/src/json/reader.rs | 4 +-
arrow/src/util/pretty.rs | 12 ++---
parquet/src/arrow/arrow_writer/mod.rs | 4 +-
14 files changed, 142 insertions(+), 182 deletions(-)
diff --git a/arrow/benches/string_dictionary_builder.rs
b/arrow/benches/string_dictionary_builder.rs
index 1a3b95917..411df3d69 100644
--- a/arrow/benches/string_dictionary_builder.rs
+++ b/arrow/benches/string_dictionary_builder.rs
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-use arrow::array::{Int32Builder, StringBuilder, StringDictionaryBuilder};
+use arrow::array::StringDictionaryBuilder;
+use arrow::datatypes::Int32Type;
use criterion::{criterion_group, criterion_main, Criterion};
use rand::{thread_rng, Rng};
@@ -43,12 +44,11 @@ fn criterion_benchmark(c: &mut Criterion) {
|b| {
let strings = build_strings(dict_size, total_size, key_len);
b.iter(|| {
- let keys = Int32Builder::with_capacity(strings.len());
- let values = StringBuilder::with_capacity(
+ let mut builder =
StringDictionaryBuilder::<Int32Type>::with_capacity(
+ strings.len(),
key_len + 1,
(key_len + 1) * dict_size,
);
- let mut builder = StringDictionaryBuilder::new(keys,
values);
for val in &strings {
builder.append(val).unwrap();
diff --git a/arrow/src/array/array_dictionary.rs
b/arrow/src/array/array_dictionary.rs
index 79f2969df..acdb427a2 100644
--- a/arrow/src/array/array_dictionary.rs
+++ b/arrow/src/array/array_dictionary.rs
@@ -22,8 +22,8 @@ use std::iter::IntoIterator;
use std::{convert::From, iter::FromIterator};
use super::{
- make_array, Array, ArrayData, ArrayRef, PrimitiveArray, PrimitiveBuilder,
- StringArray, StringBuilder, StringDictionaryBuilder,
+ make_array, Array, ArrayData, ArrayRef, PrimitiveArray, StringArray,
+ StringDictionaryBuilder,
};
use crate::datatypes::{
ArrowDictionaryKeyType, ArrowNativeType, ArrowPrimitiveType, DataType,
@@ -329,9 +329,7 @@ impl<'a, T: ArrowDictionaryKeyType> FromIterator<Option<&'a
str>> for Dictionary
fn from_iter<I: IntoIterator<Item = Option<&'a str>>>(iter: I) -> Self {
let it = iter.into_iter();
let (lower, _) = it.size_hint();
- let key_builder = PrimitiveBuilder::<T>::with_capacity(lower);
- let value_builder = StringBuilder::with_capacity(256, 1024);
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::with_capacity(lower, 256,
1024);
it.for_each(|i| {
if let Some(i) = i {
// Note: impl ... for Result<DictionaryArray<T>> fails with
@@ -367,9 +365,7 @@ impl<'a, T: ArrowDictionaryKeyType> FromIterator<&'a str>
for DictionaryArray<T>
fn from_iter<I: IntoIterator<Item = &'a str>>(iter: I) -> Self {
let it = iter.into_iter();
let (lower, _) = it.size_hint();
- let key_builder = PrimitiveBuilder::<T>::with_capacity(lower);
- let value_builder = StringBuilder::with_capacity(256, 1024);
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::with_capacity(lower, 256,
1024);
it.for_each(|i| {
builder
.append(i)
@@ -589,9 +585,8 @@ mod tests {
#[test]
fn test_dictionary_array_fmt_debug() {
- let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<UInt8Type,
UInt32Type>::with_capacity(3, 2);
builder.append(12345678).unwrap();
builder.append_null();
builder.append(22345678).unwrap();
@@ -601,9 +596,8 @@ mod tests {
format!("{:?}", array)
);
- let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(20);
- let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<UInt8Type,
UInt32Type>::with_capacity(20, 2);
for _ in 0..20 {
builder.append(1).unwrap();
}
diff --git a/arrow/src/array/builder/primitive_dictionary_builder.rs
b/arrow/src/array/builder/primitive_dictionary_builder.rs
index 71223c688..0fd41a181 100644
--- a/arrow/src/array/builder/primitive_dictionary_builder.rs
+++ b/arrow/src/array/builder/primitive_dictionary_builder.rs
@@ -60,9 +60,7 @@ impl<T: ToByteSlice> Eq for Value<T> {}
/// };
/// use arrow::datatypes::{UInt8Type, UInt32Type};
///
-/// let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
-/// let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
-/// let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+/// let mut builder = PrimitiveDictionaryBuilder::<UInt8Type,
UInt32Type>::new();
/// builder.append(12345678).unwrap();
/// builder.append_null();
/// builder.append(22345678).unwrap();
@@ -95,22 +93,41 @@ where
map: HashMap<Value<V::Native>, K::Native>,
}
+impl<K, V> Default for PrimitiveDictionaryBuilder<K, V>
+where
+ K: ArrowPrimitiveType,
+ V: ArrowPrimitiveType,
+{
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl<K, V> PrimitiveDictionaryBuilder<K, V>
where
K: ArrowPrimitiveType,
V: ArrowPrimitiveType,
{
- /// Creates a new `PrimitiveDictionaryBuilder` from a keys builder and a
value builder.
- pub fn new(
- keys_builder: PrimitiveBuilder<K>,
- values_builder: PrimitiveBuilder<V>,
- ) -> Self {
+ /// Creates a new `PrimitiveDictionaryBuilder`.
+ pub fn new() -> Self {
Self {
- keys_builder,
- values_builder,
+ keys_builder: PrimitiveBuilder::new(),
+ values_builder: PrimitiveBuilder::new(),
map: HashMap::new(),
}
}
+
+ /// Creates a new `PrimitiveDictionaryBuilder` with the provided capacities
+ ///
+ /// `keys_capacity`: the number of keys, i.e. length of array to build
+ /// `values_capacity`: the number of distinct dictionary values, i.e. size
of dictionary
+ pub fn with_capacity(keys_capacity: usize, values_capacity: usize) -> Self
{
+ Self {
+ keys_builder: PrimitiveBuilder::with_capacity(keys_capacity),
+ values_builder: PrimitiveBuilder::with_capacity(values_capacity),
+ map: HashMap::with_capacity(values_capacity),
+ }
+ }
}
impl<K, V> ArrayBuilder for PrimitiveDictionaryBuilder<K, V>
@@ -211,9 +228,8 @@ mod tests {
#[test]
fn test_primitive_dictionary_builder() {
- let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<UInt8Type,
UInt32Type>::with_capacity(3, 2);
builder.append(12345678).unwrap();
builder.append_null();
builder.append(22345678).unwrap();
@@ -239,9 +255,8 @@ mod tests {
#[test]
#[should_panic(expected = "DictionaryKeyOverflowError")]
fn test_primitive_dictionary_overflow() {
- let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(257);
- let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(257);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<UInt8Type,
UInt32Type>::with_capacity(257, 257);
// 256 unique keys.
for i in 0..256 {
builder.append(i + 1000).unwrap();
diff --git a/arrow/src/array/builder/string_dictionary_builder.rs
b/arrow/src/array/builder/string_dictionary_builder.rs
index 6ad4e9075..3816e0be1 100644
--- a/arrow/src/array/builder/string_dictionary_builder.rs
+++ b/arrow/src/array/builder/string_dictionary_builder.rs
@@ -42,9 +42,7 @@ use std::sync::Arc;
/// // Create a dictionary array indexed by bytes whose values are Strings.
/// // It can thus hold up to 256 distinct string values.
///
-/// let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(100);
-/// let value_builder = StringBuilder::new();
-/// let mut builder = StringDictionaryBuilder::new(key_builder, value_builder);
+/// let mut builder = StringDictionaryBuilder::<Int8Type>::new();
///
/// // The builder builds the dictionary value by value
/// builder.append("abc").unwrap();
@@ -84,12 +82,23 @@ where
values_builder: StringBuilder,
}
+impl<K> Default for StringDictionaryBuilder<K>
+where
+ K: ArrowDictionaryKeyType,
+{
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl<K> StringDictionaryBuilder<K>
where
K: ArrowDictionaryKeyType,
{
- /// Creates a new `StringDictionaryBuilder` from a keys builder and a
value builder.
- pub fn new(keys_builder: PrimitiveBuilder<K>, values_builder:
StringBuilder) -> Self {
+ /// Creates a new `StringDictionaryBuilder`
+ pub fn new() -> Self {
+ let keys_builder = PrimitiveBuilder::new();
+ let values_builder = StringBuilder::new();
Self {
state: Default::default(),
dedup: HashMap::with_capacity_and_hasher(keys_builder.capacity(),
()),
@@ -98,7 +107,25 @@ where
}
}
- /// Creates a new `StringDictionaryBuilder` from a keys builder and a
dictionary
+ /// Creates a new `StringDictionaryBuilder` with the provided capacities
+ ///
+ /// `keys_capacity`: the number of keys, i.e. length of array to build
+ /// `value_capacity`: the number of distinct dictionary values, i.e. size
of dictionary
+ /// `string_capacity`: the total number of bytes of all distinct strings
in the dictionary
+ pub fn with_capacity(
+ keys_capacity: usize,
+ value_capacity: usize,
+ string_capacity: usize,
+ ) -> Self {
+ Self {
+ state: Default::default(),
+ dedup: Default::default(),
+ keys_builder: PrimitiveBuilder::with_capacity(keys_capacity),
+ values_builder: StringBuilder::with_capacity(value_capacity,
string_capacity),
+ }
+ }
+
+ /// Creates a new `StringDictionaryBuilder` from a keys capacity and a
dictionary
/// which is initialized with the given values.
/// The indices of those dictionary values are used as keys.
///
@@ -111,7 +138,7 @@ where
///
/// let dictionary_values = StringArray::from(vec![None, Some("abc"),
Some("def")]);
///
- /// let mut builder =
StringDictionaryBuilder::new_with_dictionary(PrimitiveBuilder::<Int16Type>::with_capacity(3),
&dictionary_values).unwrap();
+ /// let mut builder = StringDictionaryBuilder::new_with_dictionary(3,
&dictionary_values).unwrap();
/// builder.append("def").unwrap();
/// builder.append_null();
/// builder.append("abc").unwrap();
@@ -123,7 +150,7 @@ where
/// assert_eq!(keys, &Int16Array::from(vec![Some(2), None, Some(1)]));
/// ```
pub fn new_with_dictionary(
- keys_builder: PrimitiveBuilder<K>,
+ keys_capacity: usize,
dictionary_values: &StringArray,
) -> Result<Self> {
let state = ahash::RandomState::default();
@@ -162,7 +189,7 @@ where
Ok(Self {
state,
dedup,
- keys_builder,
+ keys_builder: PrimitiveBuilder::with_capacity(keys_capacity),
values_builder,
})
}
@@ -290,9 +317,7 @@ mod tests {
#[test]
fn test_string_dictionary_builder() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(5);
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -317,10 +342,8 @@ mod tests {
fn test_string_dictionary_builder_with_existing_dictionary() {
let dictionary = StringArray::from(vec![None, Some("def"),
Some("abc")]);
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(6);
let mut builder =
- StringDictionaryBuilder::new_with_dictionary(key_builder,
&dictionary)
- .unwrap();
+ StringDictionaryBuilder::new_with_dictionary(6,
&dictionary).unwrap();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -349,9 +372,8 @@ mod tests {
let dictionary: Vec<Option<&str>> = vec![None];
let dictionary = StringArray::from(dictionary);
- let key_builder = PrimitiveBuilder::<Int16Type>::with_capacity(4);
let mut builder =
- StringDictionaryBuilder::new_with_dictionary(key_builder,
&dictionary)
+ StringDictionaryBuilder::<Int16Type>::new_with_dictionary(4,
&dictionary)
.unwrap();
builder.append("abc").unwrap();
builder.append_null();
diff --git a/arrow/src/array/equal/mod.rs b/arrow/src/array/equal/mod.rs
index 34df0bda0..52be64a3f 100644
--- a/arrow/src/array/equal/mod.rs
+++ b/arrow/src/array/equal/mod.rs
@@ -265,8 +265,8 @@ mod tests {
use crate::array::{
array::Array, ArrayData, ArrayDataBuilder, ArrayRef, BooleanArray,
FixedSizeBinaryBuilder, FixedSizeListBuilder, GenericBinaryArray,
Int32Builder,
- ListBuilder, NullArray, PrimitiveBuilder, StringArray,
StringDictionaryBuilder,
- StructArray, UnionBuilder,
+ ListBuilder, NullArray, StringArray, StringDictionaryBuilder,
StructArray,
+ UnionBuilder,
};
use crate::array::{GenericStringArray, Int32Array};
use crate::buffer::Buffer;
@@ -1245,8 +1245,8 @@ mod tests {
fn create_dictionary_array(values: &[&str], keys: &[Option<&str>]) ->
ArrayData {
let values = StringArray::from(values.to_vec());
- let mut builder = StringDictionaryBuilder::new_with_dictionary(
- PrimitiveBuilder::<Int16Type>::with_capacity(3),
+ let mut builder =
StringDictionaryBuilder::<Int16Type>::new_with_dictionary(
+ keys.len(),
&values,
)
.unwrap();
diff --git a/arrow/src/array/transform/mod.rs b/arrow/src/array/transform/mod.rs
index 48859922a..29d4434aa 100644
--- a/arrow/src/array/transform/mod.rs
+++ b/arrow/src/array/transform/mod.rs
@@ -675,8 +675,8 @@ mod tests {
array::{
Array, ArrayData, ArrayRef, BooleanArray, DictionaryArray,
FixedSizeBinaryArray, Int16Array, Int16Type, Int32Array,
Int64Array,
- Int64Builder, ListBuilder, MapBuilder, NullArray, PrimitiveBuilder,
- StringArray, StringDictionaryBuilder, StructArray, UInt8Array,
+ Int64Builder, ListBuilder, MapBuilder, NullArray, StringArray,
+ StringDictionaryBuilder, StructArray, UInt8Array,
},
buffer::Buffer,
datatypes::Field,
@@ -963,8 +963,8 @@ mod tests {
fn create_dictionary_array(values: &[&str], keys: &[Option<&str>]) ->
ArrayData {
let values = StringArray::from(values.to_vec());
- let mut builder = StringDictionaryBuilder::new_with_dictionary(
- PrimitiveBuilder::<Int16Type>::with_capacity(3),
+ let mut builder =
StringDictionaryBuilder::<Int16Type>::new_with_dictionary(
+ keys.len(),
&values,
)
.unwrap();
diff --git a/arrow/src/compute/kernels/arithmetic.rs
b/arrow/src/compute/kernels/arithmetic.rs
index eab4d2136..9bf4b00c3 100644
--- a/arrow/src/compute/kernels/arithmetic.rs
+++ b/arrow/src/compute/kernels/arithmetic.rs
@@ -1367,9 +1367,7 @@ mod tests {
#[test]
fn test_primitive_array_add_dyn_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append(6).unwrap();
builder.append(7).unwrap();
@@ -1377,9 +1375,7 @@ mod tests {
builder.append(9).unwrap();
let a = builder.finish();
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(6).unwrap();
builder.append(7).unwrap();
builder.append(8).unwrap();
@@ -1408,9 +1404,7 @@ mod tests {
assert!(c.is_null(3));
assert_eq!(10, c.value(4));
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append_null();
builder.append(7).unwrap();
@@ -1451,9 +1445,7 @@ mod tests {
#[test]
fn test_primitive_array_subtract_dyn_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(15).unwrap();
builder.append(8).unwrap();
builder.append(7).unwrap();
@@ -1461,9 +1453,7 @@ mod tests {
builder.append(20).unwrap();
let a = builder.finish();
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(6).unwrap();
builder.append(7).unwrap();
builder.append(8).unwrap();
@@ -1492,9 +1482,7 @@ mod tests {
assert!(c.is_null(3));
assert_eq!(8, c.value(4));
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append_null();
builder.append(7).unwrap();
@@ -1535,9 +1523,7 @@ mod tests {
#[test]
fn test_primitive_array_multiply_dyn_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append(6).unwrap();
builder.append(7).unwrap();
@@ -1545,9 +1531,7 @@ mod tests {
builder.append(9).unwrap();
let a = builder.finish();
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(6).unwrap();
builder.append(7).unwrap();
builder.append(8).unwrap();
@@ -1579,9 +1563,7 @@ mod tests {
#[test]
fn test_primitive_array_divide_dyn_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(15).unwrap();
builder.append(6).unwrap();
builder.append(1).unwrap();
@@ -1589,9 +1571,7 @@ mod tests {
builder.append(9).unwrap();
let a = builder.finish();
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append(3).unwrap();
builder.append(1).unwrap();
@@ -1620,9 +1600,7 @@ mod tests {
assert!(c.is_null(3));
assert_eq!(18, c.value(4));
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append_null();
builder.append(7).unwrap();
@@ -1806,9 +1784,7 @@ mod tests {
assert!(c.is_null(3));
assert_eq!(4, c.value(4));
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append_null();
builder.append(7).unwrap();
@@ -2082,15 +2058,13 @@ mod tests {
#[test]
#[should_panic(expected = "DivideByZero")]
fn test_primitive_array_divide_dyn_by_zero_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(1);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(1);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(1, 1);
builder.append(15).unwrap();
let a = builder.finish();
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(1);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(1);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(1, 1);
builder.append(0).unwrap();
let b = builder.finish();
diff --git a/arrow/src/compute/kernels/arity.rs
b/arrow/src/compute/kernels/arity.rs
index 89151c286..1251baf52 100644
--- a/arrow/src/compute/kernels/arity.rs
+++ b/arrow/src/compute/kernels/arity.rs
@@ -122,9 +122,7 @@ where
#[cfg(test)]
mod tests {
use super::*;
- use crate::array::{
- as_primitive_array, Float64Array, PrimitiveBuilder,
PrimitiveDictionaryBuilder,
- };
+ use crate::array::{as_primitive_array, Float64Array,
PrimitiveDictionaryBuilder};
use crate::datatypes::{Float64Type, Int32Type, Int8Type};
#[test]
@@ -149,9 +147,7 @@ mod tests {
#[test]
fn test_unary_dict_and_unary_dyn() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(5).unwrap();
builder.append(6).unwrap();
builder.append(7).unwrap();
@@ -160,9 +156,7 @@ mod tests {
builder.append(9).unwrap();
let dictionary_array = builder.finish();
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(6).unwrap();
builder.append(7).unwrap();
builder.append(8).unwrap();
diff --git a/arrow/src/compute/kernels/cast.rs
b/arrow/src/compute/kernels/cast.rs
index 71a4fcc95..7d67bffdf 100644
--- a/arrow/src/compute/kernels/cast.rs
+++ b/arrow/src/compute/kernels/cast.rs
@@ -2563,9 +2563,8 @@ where
.downcast_ref::<PrimitiveArray<V>>()
.unwrap();
- let keys_builder = PrimitiveBuilder::<K>::with_capacity(values.len());
- let values_builder = PrimitiveBuilder::<V>::with_capacity(values.len());
- let mut b = PrimitiveDictionaryBuilder::new(keys_builder, values_builder);
+ let mut b =
+ PrimitiveDictionaryBuilder::<K, V>::with_capacity(values.len(),
values.len());
// copy each element one at a time
for i in 0..values.len() {
@@ -2589,10 +2588,7 @@ where
{
let cast_values = cast_with_options(array, &DataType::Utf8, cast_options)?;
let values = cast_values.as_any().downcast_ref::<StringArray>().unwrap();
-
- let keys_builder = PrimitiveBuilder::<K>::with_capacity(values.len());
- let values_builder = StringBuilder::with_capacity(1024, values.len());
- let mut b = StringDictionaryBuilder::new(keys_builder, values_builder);
+ let mut b = StringDictionaryBuilder::<K>::with_capacity(values.len(),
1024, 1024);
// copy each element one at a time
for i in 0..values.len() {
@@ -5001,9 +4997,7 @@ mod tests {
// FROM a dictionary with of Utf8 values
use DataType::*;
- let keys_builder = PrimitiveBuilder::<Int8Type>::new();
- let values_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(keys_builder,
values_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("one").unwrap();
builder.append_null();
builder.append("three").unwrap();
@@ -5062,9 +5056,7 @@ mod tests {
// that are out of bounds for a particular other kind of
// index.
- let keys_builder = PrimitiveBuilder::<Int32Type>::new();
- let values_builder = PrimitiveBuilder::<Int64Type>::new();
- let mut builder = PrimitiveDictionaryBuilder::new(keys_builder,
values_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int32Type,
Int64Type>::new();
// add 200 distinct values (which can be stored by a
// dictionary indexed by int32, but not a dictionary indexed
@@ -5093,9 +5085,7 @@ mod tests {
// Same test as test_cast_dict_to_dict_bad_index_value but use
// string values (and encode the expected behavior here);
- let keys_builder = PrimitiveBuilder::<Int32Type>::new();
- let values_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(keys_builder,
values_builder);
+ let mut builder = StringDictionaryBuilder::<Int32Type>::new();
// add 200 distinct values (which can be stored by a
// dictionary indexed by int32, but not a dictionary indexed
@@ -5124,9 +5114,7 @@ mod tests {
// FROM a dictionary with of INT32 values
use DataType::*;
- let keys_builder = PrimitiveBuilder::<Int8Type>::new();
- let values_builder = PrimitiveBuilder::<Int32Type>::new();
- let mut builder = PrimitiveDictionaryBuilder::new(keys_builder,
values_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::new();
builder.append(1).unwrap();
builder.append_null();
builder.append(3).unwrap();
diff --git a/arrow/src/compute/kernels/comparison.rs
b/arrow/src/compute/kernels/comparison.rs
index 978a2d9f4..5a79c2e82 100644
--- a/arrow/src/compute/kernels/comparison.rs
+++ b/arrow/src/compute/kernels/comparison.rs
@@ -4884,9 +4884,8 @@ mod tests {
#[test]
fn test_eq_dyn_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(3, 2);
builder.append(123).unwrap();
builder.append_null();
builder.append(23).unwrap();
@@ -4928,9 +4927,8 @@ mod tests {
#[test]
fn test_lt_dyn_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(3, 2);
builder.append(123).unwrap();
builder.append_null();
builder.append(23).unwrap();
@@ -4971,9 +4969,8 @@ mod tests {
}
#[test]
fn test_lt_eq_dyn_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = PrimitiveBuilder::<Int32Type>::new();
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(3, 2);
builder.append(123).unwrap();
builder.append_null();
builder.append(23).unwrap();
@@ -5015,9 +5012,8 @@ mod tests {
#[test]
fn test_gt_dyn_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<Int32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(3, 2);
builder.append(123).unwrap();
builder.append_null();
builder.append(23).unwrap();
@@ -5059,9 +5055,8 @@ mod tests {
#[test]
fn test_gt_eq_dyn_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = PrimitiveBuilder::<Int32Type>::new();
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(3, 2);
builder.append(22).unwrap();
builder.append_null();
builder.append(23).unwrap();
@@ -5103,9 +5098,8 @@ mod tests {
#[test]
fn test_neq_dyn_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = PrimitiveBuilder::<Int32Type>::new();
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder =
+ PrimitiveDictionaryBuilder::<Int8Type,
Int32Type>::with_capacity(3, 2);
builder.append(22).unwrap();
builder.append_null();
builder.append(23).unwrap();
@@ -5247,9 +5241,7 @@ mod tests {
#[test]
fn test_eq_dyn_utf8_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -5275,9 +5267,7 @@ mod tests {
}
#[test]
fn test_lt_dyn_utf8_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -5304,9 +5294,7 @@ mod tests {
}
#[test]
fn test_lt_eq_dyn_utf8_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -5333,9 +5321,7 @@ mod tests {
}
#[test]
fn test_gt_eq_dyn_utf8_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -5363,9 +5349,7 @@ mod tests {
#[test]
fn test_gt_dyn_utf8_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
@@ -5392,9 +5376,7 @@ mod tests {
}
#[test]
fn test_neq_dyn_utf8_scalar_with_dict() {
- let key_builder = PrimitiveBuilder::<Int8Type>::new();
- let value_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = StringDictionaryBuilder::<Int8Type>::new();
builder.append("abc").unwrap();
builder.append_null();
builder.append("def").unwrap();
diff --git a/arrow/src/compute/kernels/take.rs
b/arrow/src/compute/kernels/take.rs
index 19eb1b17c..8f1aab27b 100644
--- a/arrow/src/compute/kernels/take.rs
+++ b/arrow/src/compute/kernels/take.rs
@@ -1960,10 +1960,7 @@ mod tests {
#[test]
fn test_take_dict() {
- let keys_builder = Int16Builder::new();
- let values_builder = StringBuilder::new();
-
- let mut dict_builder = StringDictionaryBuilder::new(keys_builder,
values_builder);
+ let mut dict_builder = StringDictionaryBuilder::<Int16Type>::new();
dict_builder.append("foo").unwrap();
dict_builder.append("bar").unwrap();
diff --git a/arrow/src/json/reader.rs b/arrow/src/json/reader.rs
index fb8f6cfab..c32e5ca18 100644
--- a/arrow/src/json/reader.rs
+++ b/arrow/src/json/reader.rs
@@ -914,9 +914,7 @@ impl Decoder {
where
T: ArrowPrimitiveType + ArrowDictionaryKeyType,
{
- let key_builder = PrimitiveBuilder::<T>::with_capacity(row_len);
- let values_builder = StringBuilder::with_capacity(row_len, row_len *
5);
- StringDictionaryBuilder::new(key_builder, values_builder)
+ StringDictionaryBuilder::with_capacity(row_len, row_len, row_len * 5)
}
#[inline(always)]
diff --git a/arrow/src/util/pretty.rs b/arrow/src/util/pretty.rs
index b0013619b..f819e389f 100644
--- a/arrow/src/util/pretty.rs
+++ b/arrow/src/util/pretty.rs
@@ -108,10 +108,10 @@ mod tests {
use crate::{
array::{
self, new_null_array, Array, Date32Array, Date64Array,
- FixedSizeBinaryBuilder, Float16Array, Int32Array, PrimitiveBuilder,
- StringArray, StringBuilder, StringDictionaryBuilder, StructArray,
- Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray,
- Time64NanosecondArray, TimestampMicrosecondArray,
TimestampMillisecondArray,
+ FixedSizeBinaryBuilder, Float16Array, Int32Array, StringArray,
+ StringDictionaryBuilder, StructArray, Time32MillisecondArray,
+ Time32SecondArray, Time64MicrosecondArray, Time64NanosecondArray,
+ TimestampMicrosecondArray, TimestampMillisecondArray,
TimestampNanosecondArray, TimestampSecondArray, UnionArray,
UnionBuilder,
},
buffer::Buffer,
@@ -241,9 +241,7 @@ mod tests {
DataType::Dictionary(Box::new(DataType::Int32),
Box::new(DataType::Utf8));
let schema = Arc::new(Schema::new(vec![Field::new("d1", field_type,
true)]));
- let keys_builder = PrimitiveBuilder::<Int32Type>::with_capacity(10);
- let values_builder = StringBuilder::new();
- let mut builder = StringDictionaryBuilder::new(keys_builder,
values_builder);
+ let mut builder = StringDictionaryBuilder::<Int32Type>::new();
builder.append("one")?;
builder.append_null();
diff --git a/parquet/src/arrow/arrow_writer/mod.rs
b/parquet/src/arrow/arrow_writer/mod.rs
index 6f9d5b3af..1fef695dc 100644
--- a/parquet/src/arrow/arrow_writer/mod.rs
+++ b/parquet/src/arrow/arrow_writer/mod.rs
@@ -1653,9 +1653,7 @@ mod tests {
)]));
// create some data
- let key_builder = PrimitiveBuilder::<UInt8Type>::with_capacity(3);
- let value_builder = PrimitiveBuilder::<UInt32Type>::with_capacity(2);
- let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ let mut builder = PrimitiveDictionaryBuilder::<UInt8Type,
UInt32Type>::new();
builder.append(12345678).unwrap();
builder.append_null();
builder.append(22345678).unwrap();