Struct arrow_array::array::GenericListArray
source · pub struct GenericListArray<OffsetSize: OffsetSizeTrait> { /* private fields */ }
Expand description
An array of variable length lists, similar to JSON arrays
(e.g. ["A", "B", "C"]
).
Lists are represented using offsets
into a values
child
array. Offsets are stored in two adjacent entries of an
OffsetBuffer
.
Arrow defines ListArray
with i32
offsets and
LargeListArray
with i64
offsets.
Use GenericListBuilder
to construct a GenericListArray
.
Representation
A ListArray
can represent a list of values of any other
supported Arrow type. Each element of the ListArray
itself is
a list which may be empty, may contain NULL and non-null values,
or may itself be NULL.
For example, the ListArray
shown in the following diagram stores
lists of strings. Note that []
represents an empty (length
0), but non NULL list.
┌─────────────┐
│ [A,B,C] │
├─────────────┤
│ [] │
├─────────────┤
│ NULL │
├─────────────┤
│ [D] │
├─────────────┤
│ [NULL, F] │
└─────────────┘
The values
are stored in a child StringArray
and the offsets
are stored in an OffsetBuffer
as shown in the following
diagram. The logical values and offsets are shown on the left, and
the actual ListArray
encoding on the right.
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ─ ─ ─ ┐ │
┌─────────────┐ ┌───────┐ │ ┌───┐ ┌───┐ ┌───┐ ┌───┐
│ [A,B,C] │ │ (0,3) │ │ 1 │ │ 0 │ │ │ 1 │ │ A │ │ 0 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤
│ [] │ │ (3,3) │ │ 1 │ │ 3 │ │ │ 1 │ │ B │ │ 1 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤
│ NULL │ │ (3,4) │ │ 0 │ │ 3 │ │ │ 1 │ │ C │ │ 2 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤
│ [D] │ │ (4,5) │ │ 1 │ │ 4 │ │ │ ? │ │ ? │ │ 3 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤
│ [NULL, F] │ │ (5,7) │ │ 1 │ │ 5 │ │ │ 1 │ │ D │ │ 4 │
└─────────────┘ └───────┘ │ └───┘ ├───┤ ├───┤ ├───┤
│ 7 │ │ │ 0 │ │ ? │ │ 5 │
│ Validity └───┘ ├───┤ ├───┤
Logical Logical (nulls) Offsets │ │ 1 │ │ F │ │ 6 │
Values Offsets │ └───┘ └───┘
│ Values │ │
(offsets[i], │ ListArray (Array)
offsets[i+1]) └ ─ ─ ─ ─ ─ ─ ┘ │
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Implementations§
source§impl<OffsetSize: OffsetSizeTrait> GenericListArray<OffsetSize>
impl<OffsetSize: OffsetSizeTrait> GenericListArray<OffsetSize>
sourcepub const DATA_TYPE_CONSTRUCTOR: fn(_: FieldRef) -> DataType = _
pub const DATA_TYPE_CONSTRUCTOR: fn(_: FieldRef) -> DataType = _
The data type constructor of list array.
The input is the schema of the child array and
the output is the DataType
, List or LargeList.
sourcepub fn try_new(
field: FieldRef,
offsets: OffsetBuffer<OffsetSize>,
values: ArrayRef,
nulls: Option<NullBuffer>
) -> Result<Self, ArrowError>
pub fn try_new( field: FieldRef, offsets: OffsetBuffer<OffsetSize>, values: ArrayRef, nulls: Option<NullBuffer> ) -> Result<Self, ArrowError>
Create a new GenericListArray
from the provided parts
Errors
Errors if
offsets.len() - 1 != nulls.len()
offsets.last() > values.len()
!field.is_nullable() && values.is_nullable()
field.data_type() != values.data_type()
sourcepub fn new(
field: FieldRef,
offsets: OffsetBuffer<OffsetSize>,
values: ArrayRef,
nulls: Option<NullBuffer>
) -> Self
pub fn new( field: FieldRef, offsets: OffsetBuffer<OffsetSize>, values: ArrayRef, nulls: Option<NullBuffer> ) -> Self
Create a new GenericListArray
from the provided parts
Panics
Panics if Self::try_new
returns an error
sourcepub fn new_null(field: FieldRef, len: usize) -> Self
pub fn new_null(field: FieldRef, len: usize) -> Self
Create a new GenericListArray
of length len
where all values are null
sourcepub fn into_parts(
self
) -> (FieldRef, OffsetBuffer<OffsetSize>, ArrayRef, Option<NullBuffer>)
pub fn into_parts( self ) -> (FieldRef, OffsetBuffer<OffsetSize>, ArrayRef, Option<NullBuffer>)
Deconstruct this array into its constituent parts
sourcepub fn offsets(&self) -> &OffsetBuffer<OffsetSize>
pub fn offsets(&self) -> &OffsetBuffer<OffsetSize>
Returns a reference to the offsets of this list
Unlike Self::value_offsets
this returns the OffsetBuffer
allowing for zero-copy cloning
sourcepub fn value_type(&self) -> DataType
pub fn value_type(&self) -> DataType
Returns a clone of the value type of this list.
sourcepub unsafe fn value_unchecked(&self, i: usize) -> ArrayRef
pub unsafe fn value_unchecked(&self, i: usize) -> ArrayRef
Returns ith value of this list array.
Safety
Caller must ensure that the index is within the array bounds
sourcepub fn value_offsets(&self) -> &[OffsetSize]
pub fn value_offsets(&self) -> &[OffsetSize]
Returns the offset values in the offsets buffer
sourcepub fn value_length(&self, i: usize) -> OffsetSize
pub fn value_length(&self, i: usize) -> OffsetSize
Returns the length for value at index i
.
sourcepub fn iter<'a>(&'a self) -> GenericListArrayIter<'a, OffsetSize>
pub fn iter<'a>(&'a self) -> GenericListArrayIter<'a, OffsetSize>
constructs a new iterator
sourcepub fn slice(&self, offset: usize, length: usize) -> Self
pub fn slice(&self, offset: usize, length: usize) -> Self
Returns a zero-copy slice of this array with the indicated offset and length.
sourcepub fn from_iter_primitive<T, P, I>(iter: I) -> Selfwhere
T: ArrowPrimitiveType,
P: IntoIterator<Item = Option<<T as ArrowPrimitiveType>::Native>>,
I: IntoIterator<Item = Option<P>>,
pub fn from_iter_primitive<T, P, I>(iter: I) -> Selfwhere T: ArrowPrimitiveType, P: IntoIterator<Item = Option<<T as ArrowPrimitiveType>::Native>>, I: IntoIterator<Item = Option<P>>,
Creates a GenericListArray
from an iterator of primitive values
Example
let data = vec![
Some(vec![Some(0), Some(1), Some(2)]),
None,
Some(vec![Some(3), None, Some(5)]),
Some(vec![Some(6), Some(7)]),
];
let list_array = ListArray::from_iter_primitive::<Int32Type, _, _>(data);
println!("{:?}", list_array);
Trait Implementations§
source§impl<OffsetSize: OffsetSizeTrait> Array for GenericListArray<OffsetSize>
impl<OffsetSize: OffsetSizeTrait> Array for GenericListArray<OffsetSize>
source§fn slice(&self, offset: usize, length: usize) -> ArrayRef
fn slice(&self, offset: usize, length: usize) -> ArrayRef
source§fn offset(&self) -> usize
fn offset(&self) -> usize
0
. Read moresource§fn get_buffer_memory_size(&self) -> usize
fn get_buffer_memory_size(&self) -> usize
source§fn get_array_memory_size(&self) -> usize
fn get_array_memory_size(&self) -> usize
get_buffer_memory_size()
and
includes the overhead of the data structures that contain the pointers to the various buffers.source§fn logical_nulls(&self) -> Option<NullBuffer>
fn logical_nulls(&self) -> Option<NullBuffer>
source§fn is_null(&self, index: usize) -> bool
fn is_null(&self, index: usize) -> bool
index
is null.
When using this function on a slice, the index is relative to the slice. Read moresource§fn is_valid(&self, index: usize) -> bool
fn is_valid(&self, index: usize) -> bool
index
is not null.
When using this function on a slice, the index is relative to the slice. Read moresource§fn null_count(&self) -> usize
fn null_count(&self) -> usize
source§fn is_nullable(&self) -> bool
fn is_nullable(&self) -> bool
false
if the array is guaranteed to not contain any logical nulls Read more