Struct arrow::array::StringDictionaryBuilder [−][src]
pub struct StringDictionaryBuilder<K> where
K: ArrowDictionaryKeyType, { /* fields omitted */ }
Expand description
Array builder for DictionaryArray
that stores Strings. For example to map a set of byte indices
to String values. Note that the use of a HashMap
here will not scale to very large
arrays or result in an ordered dictionary.
use arrow::{ array::{ Int8Array, StringArray, PrimitiveBuilder, StringBuilder, StringDictionaryBuilder, }, datatypes::Int8Type, }; // 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>::new(100); let value_builder = StringBuilder::new(100); let mut builder = StringDictionaryBuilder::new(key_builder, value_builder); // The builder builds the dictionary value by value builder.append("abc").unwrap(); builder.append_null().unwrap(); builder.append("def").unwrap(); builder.append("def").unwrap(); builder.append("abc").unwrap(); let array = builder.finish(); assert_eq!( array.keys(), &Int8Array::from(vec![Some(0), None, Some(1), Some(1), Some(0)]) ); // Values are polymorphic and so require a downcast. let av = array.values(); let ava: &StringArray = av.as_any().downcast_ref::<StringArray>().unwrap(); assert_eq!(ava.value(0), "abc"); assert_eq!(ava.value(1), "def");
Implementations
Creates a new StringDictionaryBuilder
from a keys builder and a value builder.
pub fn new_with_dictionary(
keys_builder: PrimitiveBuilder<K>,
dictionary_values: &StringArray
) -> Result<Self>
pub fn new_with_dictionary(
keys_builder: PrimitiveBuilder<K>,
dictionary_values: &StringArray
) -> Result<Self>
Creates a new StringDictionaryBuilder
from a keys builder and a dictionary
which is initialized with the given values.
The indices of those dictionary values are used as keys.
Example
use arrow::datatypes::Int16Type; use arrow::array::{StringArray, StringDictionaryBuilder, PrimitiveBuilder, Int16Array}; use std::convert::TryFrom; let dictionary_values = StringArray::from(vec![None, Some("abc"), Some("def")]); let mut builder = StringDictionaryBuilder::new_with_dictionary(PrimitiveBuilder::<Int16Type>::new(3), &dictionary_values).unwrap(); builder.append("def").unwrap(); builder.append_null().unwrap(); builder.append("abc").unwrap(); let dictionary_array = builder.finish(); let keys = dictionary_array.keys(); assert_eq!(keys, &Int16Array::from(vec![Some(2), None, Some(1)]));
Append a primitive value to the array. Return an existing index if already present in the values array or a new index if the value is appended to the values array.
Builds the DictionaryArray
and reset this builder.
Trait Implementations
Returns the builder as an mutable Any
reference.
Returns the boxed builder as a box of Any
.