GroupValuesRows

Struct GroupValuesRows 

Source
pub struct GroupValuesRows {
    schema: SchemaRef,
    row_converter: RowConverter,
    map: HashTable<(u64, usize)>,
    map_size: usize,
    group_values: Option<Rows>,
    hashes_buffer: Vec<u64>,
    rows_buffer: Rows,
    random_state: RandomState,
}
Expand description

A GroupValues making use of [Rows]

This is a general implementation of GroupValues that works for any combination of data types and number of columns, including nested types such as structs and lists.

It uses the arrow-rs [Rows] to store the group values, which is a row-wise representation.

Fields§

§schema: SchemaRef

The output schema

§row_converter: RowConverter

Converter for the group values

§map: HashTable<(u64, usize)>

Logically maps group values to a group_index in Self::group_values and in each accumulator

Uses the raw API of hashbrown to avoid actually storing the keys (group values) in the table

keys: u64 hashes of the GroupValue values: (hash, group_index)

§map_size: usize

The size of map in bytes

§group_values: Option<Rows>

The actual group by values, stored in arrow Row format. group_values[i] holds the group value for group_index i.

The row format is used to compare group keys quickly and store them efficiently in memory. Quick comparison is especially important for multi-column group keys.

§hashes_buffer: Vec<u64>

reused buffer to store hashes

§rows_buffer: Rows

reused buffer to store rows

§random_state: RandomState

Random state for creating hashes

Implementations§

Source§

impl GroupValuesRows

Source

pub fn try_new(schema: SchemaRef) -> Result<Self>

Trait Implementations§

Source§

impl GroupValues for GroupValuesRows

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§

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,