GroupValuesPrimitive

Struct GroupValuesPrimitive 

Source
pub struct GroupValuesPrimitive<T: ArrowPrimitiveType> {
    data_type: DataType,
    map: HashTable<(usize, u64)>,
    null_group: Option<usize>,
    values: Vec<T::Native>,
    random_state: RandomState,
}
Expand description

A GroupValues storing a single column of primitive values

This specialization is significantly faster than using the more general purpose Rows format

Fields§

§data_type: DataType

The data type of the output array

§map: HashTable<(usize, u64)>

Stores the (group_index, hash) based on the hash of its value

We also store hash is for reducing cost of rehashing. Such cost is obvious in high cardinality group by situation. More details can see: https://github.com/apache/datafusion/issues/15961

§null_group: Option<usize>

The group index of the null value if any

§values: Vec<T::Native>

The values for each group index

§random_state: RandomState

The random state used to generate hashes

Implementations§

Source§

impl<T: ArrowPrimitiveType> GroupValuesPrimitive<T>

Source

pub fn new(data_type: DataType) -> Self

Trait Implementations§

Source§

impl<T: ArrowPrimitiveType> GroupValues for GroupValuesPrimitive<T>
where T::Native: HashValue,

Source§

fn intern(&mut self, cols: &[ArrayRef], groups: &mut Vec<usize>) -> Result<()>

Calculates the group id for each input row of cols, assigning new group ids as necessary. Read more
Source§

fn size(&self) -> usize

Returns the number of bytes of memory used by this GroupValues
Source§

fn is_empty(&self) -> bool

Returns true if this GroupValues is empty
Source§

fn len(&self) -> usize

The number of values (distinct group values) stored in this GroupValues
Source§

fn emit(&mut self, emit_to: EmitTo) -> Result<Vec<ArrayRef>>

Emits the group values
Source§

fn clear_shrink(&mut self, batch: &RecordBatch)

Clear the contents and shrink the capacity to the size of the batch (free up memory usage)

Auto Trait Implementations§

§

impl<T> Freeze for GroupValuesPrimitive<T>

§

impl<T> RefUnwindSafe for GroupValuesPrimitive<T>
where <T as ArrowPrimitiveType>::Native: RefUnwindSafe,

§

impl<T> Send for GroupValuesPrimitive<T>

§

impl<T> Sync for GroupValuesPrimitive<T>

§

impl<T> Unpin for GroupValuesPrimitive<T>
where <T as ArrowPrimitiveType>::Native: Unpin,

§

impl<T> UnwindSafe for GroupValuesPrimitive<T>
where <T as ArrowPrimitiveType>::Native: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

§

impl<T> ErasedDestructor for T
where T: 'static,