pub struct PrimitiveDictionaryBuilder<K, V>where
K: ArrowPrimitiveType,
V: ArrowPrimitiveType,{ /* private fields */ }
Expand description
Builder for DictionaryArray
of PrimitiveArray
§Example:
let mut builder = PrimitiveDictionaryBuilder::<UInt8Type, UInt32Type>::new();
builder.append(12345678).unwrap();
builder.append_null();
builder.append(22345678).unwrap();
let array = builder.finish();
assert_eq!(
array.keys(),
&UInt8Array::from(vec![Some(0), None, Some(1)])
);
// Values are polymorphic and so require a downcast.
let av = array.values();
let ava: &UInt32Array = av.as_any().downcast_ref::<UInt32Array>().unwrap();
let avs: &[u32] = ava.values();
assert!(!array.is_null(0));
assert!(array.is_null(1));
assert!(!array.is_null(2));
assert_eq!(avs, &[12345678, 22345678]);
Implementations§
Source§impl<K, V> PrimitiveDictionaryBuilder<K, V>where
K: ArrowPrimitiveType,
V: ArrowPrimitiveType,
impl<K, V> PrimitiveDictionaryBuilder<K, V>where
K: ArrowPrimitiveType,
V: ArrowPrimitiveType,
Sourcepub fn new() -> PrimitiveDictionaryBuilder<K, V>
pub fn new() -> PrimitiveDictionaryBuilder<K, V>
Creates a new PrimitiveDictionaryBuilder
.
Sourcepub fn new_from_empty_builders(
keys_builder: PrimitiveBuilder<K>,
values_builder: PrimitiveBuilder<V>,
) -> PrimitiveDictionaryBuilder<K, V>
pub fn new_from_empty_builders( keys_builder: PrimitiveBuilder<K>, values_builder: PrimitiveBuilder<V>, ) -> PrimitiveDictionaryBuilder<K, V>
Creates a new PrimitiveDictionaryBuilder
from the provided keys and values builders.
§Panics
This method panics if keys_builder
or values_builder
is not empty.
Sourcepub unsafe fn new_from_builders(
keys_builder: PrimitiveBuilder<K>,
values_builder: PrimitiveBuilder<V>,
) -> PrimitiveDictionaryBuilder<K, V>
pub unsafe fn new_from_builders( keys_builder: PrimitiveBuilder<K>, values_builder: PrimitiveBuilder<V>, ) -> PrimitiveDictionaryBuilder<K, V>
Creates a new PrimitiveDictionaryBuilder
from existing PrimitiveBuilder
s of keys and values.
§Safety
caller must ensure that the passed in builders are valid for DictionaryArray.
Sourcepub fn with_capacity(
keys_capacity: usize,
values_capacity: usize,
) -> PrimitiveDictionaryBuilder<K, V>
pub fn with_capacity( keys_capacity: usize, values_capacity: usize, ) -> PrimitiveDictionaryBuilder<K, V>
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
Sourcepub fn try_new_from_builder<K2>(
source: PrimitiveDictionaryBuilder<K2, V>,
) -> Result<PrimitiveDictionaryBuilder<K, V>, ArrowError>where
<K as ArrowPrimitiveType>::Native: NumCast,
K2: ArrowDictionaryKeyType,
<K2 as ArrowPrimitiveType>::Native: NumCast,
pub fn try_new_from_builder<K2>(
source: PrimitiveDictionaryBuilder<K2, V>,
) -> Result<PrimitiveDictionaryBuilder<K, V>, ArrowError>where
<K as ArrowPrimitiveType>::Native: NumCast,
K2: ArrowDictionaryKeyType,
<K2 as ArrowPrimitiveType>::Native: NumCast,
Creates a new PrimitiveDictionaryBuilder
from the existing builder with the same
keys and values, but with a new data type for the keys.
§Example
let mut u8_keyed_builder = PrimitiveDictionaryBuilder::<UInt8Type, UInt64Type>::new();
// appending too many values causes the dictionary to overflow
for i in 0..256 {
u8_keyed_builder.append_value(i);
}
let result = u8_keyed_builder.append(256);
assert!(matches!(result, Err(ArrowError::DictionaryKeyOverflowError{})));
// we need to upgrade to a larger key type
let mut u16_keyed_builder = PrimitiveDictionaryBuilder::<UInt16Type, UInt64Type>::try_new_from_builder(u8_keyed_builder).unwrap();
let dictionary_array = u16_keyed_builder.finish();
let keys = dictionary_array.keys();
assert_eq!(keys, &UInt16Array::from_iter(0..256));
Source§impl<K, V> PrimitiveDictionaryBuilder<K, V>where
K: ArrowDictionaryKeyType,
V: ArrowPrimitiveType,
impl<K, V> PrimitiveDictionaryBuilder<K, V>where
K: ArrowDictionaryKeyType,
V: ArrowPrimitiveType,
Sourcepub fn append(
&mut self,
value: <V as ArrowPrimitiveType>::Native,
) -> Result<<K as ArrowPrimitiveType>::Native, ArrowError>
pub fn append( &mut self, value: <V as ArrowPrimitiveType>::Native, ) -> Result<<K as ArrowPrimitiveType>::Native, ArrowError>
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.
Sourcepub fn append_n(
&mut self,
value: <V as ArrowPrimitiveType>::Native,
count: usize,
) -> Result<<K as ArrowPrimitiveType>::Native, ArrowError>
pub fn append_n( &mut self, value: <V as ArrowPrimitiveType>::Native, count: usize, ) -> Result<<K as ArrowPrimitiveType>::Native, ArrowError>
Append a value multiple times to the array.
This is the same as append
but allows to append the same value multiple times without doing multiple lookups.
Returns an error if the new index would overflow the key type.
Sourcepub fn append_value(&mut self, value: <V as ArrowPrimitiveType>::Native)
pub fn append_value(&mut self, value: <V as ArrowPrimitiveType>::Native)
Infallibly append a value to this builder
§Panics
Panics if the resulting length of the dictionary values array would exceed T::Native::MAX
Sourcepub fn append_values(
&mut self,
value: <V as ArrowPrimitiveType>::Native,
count: usize,
)
pub fn append_values( &mut self, value: <V as ArrowPrimitiveType>::Native, count: usize, )
Infallibly append a value to this builder repeatedly count
times.
This is the same as append_value
but allows to append the same value multiple times without doing multiple lookups.
§Panics
Panics if the resulting length of the dictionary values array would exceed T::Native::MAX
Sourcepub fn append_null(&mut self)
pub fn append_null(&mut self)
Appends a null slot into the builder
Sourcepub fn append_nulls(&mut self, n: usize)
pub fn append_nulls(&mut self, n: usize)
Append n
null slots into the builder
Sourcepub fn append_option(
&mut self,
value: Option<<V as ArrowPrimitiveType>::Native>,
)
pub fn append_option( &mut self, value: Option<<V as ArrowPrimitiveType>::Native>, )
Append an Option
value into the builder
§Panics
Panics if the resulting length of the dictionary values array would exceed T::Native::MAX
Sourcepub fn append_options(
&mut self,
value: Option<<V as ArrowPrimitiveType>::Native>,
count: usize,
)
pub fn append_options( &mut self, value: Option<<V as ArrowPrimitiveType>::Native>, count: usize, )
Append an Option
value into the builder repeatedly count
times.
This is the same as append_option
but allows to append the same value multiple times without doing multiple lookups.
§Panics
Panics if the resulting length of the dictionary values array would exceed T::Native::MAX
Sourcepub fn extend_dictionary(
&mut self,
dictionary: &TypedDictionaryArray<'_, K, PrimitiveArray<V>>,
) -> Result<(), ArrowError>
pub fn extend_dictionary( &mut self, dictionary: &TypedDictionaryArray<'_, K, PrimitiveArray<V>>, ) -> Result<(), ArrowError>
Extends builder with dictionary
This is the same as Self::extend
but is faster as it translates
the dictionary values once rather than doing a lookup for each item in the iterator
when dictionary values are null (the actual mapped values) the keys are null
Sourcepub fn finish(&mut self) -> DictionaryArray<K>
pub fn finish(&mut self) -> DictionaryArray<K>
Builds the DictionaryArray
and reset this builder.
Sourcepub fn finish_cloned(&self) -> DictionaryArray<K>
pub fn finish_cloned(&self) -> DictionaryArray<K>
Builds the DictionaryArray
without resetting the builder.
Sourcepub fn finish_preserve_values(&mut self) -> DictionaryArray<K>
pub fn finish_preserve_values(&mut self) -> DictionaryArray<K>
Builds the DictionaryArray
without resetting the values builder or
the internal de-duplication map.
The advantage of doing this is that the values will represent the entire
set of what has been built so-far by this builder and ensures
consistency in the assignment of keys to values across multiple calls
to finish_preserve_values
. This enables ipc writers to efficiently
emit delta dictionaries.
The downside to this is that building the record requires creating a copy of the values, which can become slowly more expensive if the dictionary grows.
Additionally, if record batches from multiple different dictionary builders for the same column are fed into a single ipc writer, beware that entire dictionaries are likely to be re-sent frequently even when the majority of the values are not used by the current record batch.
Sourcepub fn values_slice(&self) -> &[<V as ArrowPrimitiveType>::Native]
pub fn values_slice(&self) -> &[<V as ArrowPrimitiveType>::Native]
Returns the current dictionary values buffer as a slice
Sourcepub fn values_slice_mut(&mut self) -> &mut [<V as ArrowPrimitiveType>::Native]
pub fn values_slice_mut(&mut self) -> &mut [<V as ArrowPrimitiveType>::Native]
Returns the current dictionary values buffer as a mutable slice
Sourcepub fn validity_slice(&self) -> Option<&[u8]>
pub fn validity_slice(&self) -> Option<&[u8]>
Returns the current null buffer as a slice
Trait Implementations§
Source§impl<K, V> ArrayBuilder for PrimitiveDictionaryBuilder<K, V>where
K: ArrowDictionaryKeyType,
V: ArrowPrimitiveType,
impl<K, V> ArrayBuilder for PrimitiveDictionaryBuilder<K, V>where
K: ArrowDictionaryKeyType,
V: ArrowPrimitiveType,
Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Returns the builder as an mutable Any
reference.
Source§fn into_box_any(self: Box<PrimitiveDictionaryBuilder<K, V>>) -> Box<dyn Any>
fn into_box_any(self: Box<PrimitiveDictionaryBuilder<K, V>>) -> Box<dyn Any>
Returns the boxed builder as a box of Any
.
Source§fn finish_cloned(&self) -> Arc<dyn Array>
fn finish_cloned(&self) -> Arc<dyn Array>
Builds the array without resetting the builder.
Source§impl<K, V> Debug for PrimitiveDictionaryBuilder<K, V>where
K: Debug + ArrowPrimitiveType,
V: Debug + ArrowPrimitiveType,
<V as ArrowPrimitiveType>::Native: Debug,
impl<K, V> Debug for PrimitiveDictionaryBuilder<K, V>where
K: Debug + ArrowPrimitiveType,
V: Debug + ArrowPrimitiveType,
<V as ArrowPrimitiveType>::Native: Debug,
Source§impl<K, V> Default for PrimitiveDictionaryBuilder<K, V>where
K: ArrowPrimitiveType,
V: ArrowPrimitiveType,
impl<K, V> Default for PrimitiveDictionaryBuilder<K, V>where
K: ArrowPrimitiveType,
V: ArrowPrimitiveType,
Source§fn default() -> PrimitiveDictionaryBuilder<K, V>
fn default() -> PrimitiveDictionaryBuilder<K, V>
Source§impl<K, P> Extend<Option<<P as ArrowPrimitiveType>::Native>> for PrimitiveDictionaryBuilder<K, P>where
K: ArrowDictionaryKeyType,
P: ArrowPrimitiveType,
impl<K, P> Extend<Option<<P as ArrowPrimitiveType>::Native>> for PrimitiveDictionaryBuilder<K, P>where
K: ArrowDictionaryKeyType,
P: ArrowPrimitiveType,
Source§fn extend<T>(&mut self, iter: T)
fn extend<T>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Auto Trait Implementations§
impl<K, V> Freeze for PrimitiveDictionaryBuilder<K, V>
impl<K, V> RefUnwindSafe for PrimitiveDictionaryBuilder<K, V>where
<K as ArrowPrimitiveType>::Native: RefUnwindSafe,
<V as ArrowPrimitiveType>::Native: RefUnwindSafe,
impl<K, V> Send for PrimitiveDictionaryBuilder<K, V>
impl<K, V> Sync for PrimitiveDictionaryBuilder<K, V>
impl<K, V> Unpin for PrimitiveDictionaryBuilder<K, V>
impl<K, V> UnwindSafe for PrimitiveDictionaryBuilder<K, V>
Blanket Implementations§
Source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
Source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
Source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
Source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
Source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
Source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
Source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
Source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
Source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
Source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
Source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
Source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
Source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
Source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
Source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
Source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
Source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset
. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset
. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset
. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset
. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more