Struct GenericListViewArray
pub struct GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,{
data_type: DataType,
nulls: Option<NullBuffer>,
values: Arc<dyn Array>,
value_offsets: ScalarBuffer<OffsetSize>,
value_sizes: ScalarBuffer<OffsetSize>,
}
Expand description
An array of variable length lists, specifically in the list-view layout.
Differs from GenericListArray
(which represents the list layout) in that
the sizes of the child arrays are explicitly encoded in a separate buffer, instead
of being derived from the difference between subsequent offsets in the offset buffer.
This allows the offsets (and subsequently child data) to be out of order. It also allows take / filter operations to be implemented without copying the underlying data.
§Representation
Given the same example array from GenericListArray
, it would be represented
as such via a list-view layout array:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ─ ─ ─ ┐ │
┌─────────────┐ ┌───────┐ │ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐
│ [A,B,C] │ │ (0,3) │ │ 1 │ │ 0 │ │ 3 │ │ │ 1 │ │ A │ │ 0 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ [] │ │ (3,0) │ │ 1 │ │ 3 │ │ 0 │ │ │ 1 │ │ B │ │ 1 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ NULL │ │ (?,?) │ │ 0 │ │ ? │ │ ? │ │ │ 1 │ │ C │ │ 2 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ [D] │ │ (4,1) │ │ 1 │ │ 4 │ │ 1 │ │ │ ? │ │ ? │ │ 3 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ [NULL, F] │ │ (5,2) │ │ 1 │ │ 5 │ │ 2 │ │ │ 1 │ │ D │ │ 4 │
└─────────────┘ └───────┘ │ └───┘ └───┘ └───┘ ├───┤ ├───┤
│ │ 0 │ │ ? │ │ 5 │
Logical Logical │ Validity Offsets Sizes ├───┤ ├───┤
Values Offset (nulls) │ │ 1 │ │ F │ │ 6 │
& Size │ └───┘ └───┘
│ Values │ │
(offsets[i], │ ListViewArray (Array)
sizes[i]) └ ─ ─ ─ ─ ─ ─ ┘ │
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Another way of representing the same array but taking advantage of the offsets being out of order:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ─ ─ ─ ┐ │
┌─────────────┐ ┌───────┐ │ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐
│ [A,B,C] │ │ (2,3) │ │ 1 │ │ 2 │ │ 3 │ │ │ 0 │ │ ? │ │ 0 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ [] │ │ (0,0) │ │ 1 │ │ 0 │ │ 0 │ │ │ 1 │ │ F │ │ 1 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ NULL │ │ (?,?) │ │ 0 │ │ ? │ │ ? │ │ │ 1 │ │ A │ │ 2 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ [D] │ │ (5,1) │ │ 1 │ │ 5 │ │ 1 │ │ │ 1 │ │ B │ │ 3 │
├─────────────┤ ├───────┤ │ ├───┤ ├───┤ ├───┤ ├───┤ ├───┤
│ [NULL, F] │ │ (0,2) │ │ 1 │ │ 0 │ │ 2 │ │ │ 1 │ │ C │ │ 4 │
└─────────────┘ └───────┘ │ └───┘ └───┘ └───┘ ├───┤ ├───┤
│ │ 1 │ │ D │ │ 5 │
Logical Logical │ Validity Offsets Sizes └───┘ └───┘
Values Offset (nulls) │ Values │ │
& Size │ (Array)
└ ─ ─ ─ ─ ─ ─ ┘ │
(offsets[i], │ ListViewArray
sizes[i]) │
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Fields§
§data_type: DataType
§nulls: Option<NullBuffer>
§values: Arc<dyn Array>
§value_offsets: ScalarBuffer<OffsetSize>
§value_sizes: ScalarBuffer<OffsetSize>
Implementations§
§impl<OffsetSize> GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,
impl<OffsetSize> GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,
pub const DATA_TYPE_CONSTRUCTOR: fn(_: Arc<Field>) -> DataType
pub const DATA_TYPE_CONSTRUCTOR: fn(_: Arc<Field>) -> DataType
The data type constructor of listview array.
The input is the schema of the child array and
the output is the DataType
, ListView or LargeListView.
pub fn try_new(
field: Arc<Field>,
offsets: ScalarBuffer<OffsetSize>,
sizes: ScalarBuffer<OffsetSize>,
values: Arc<dyn Array>,
nulls: Option<NullBuffer>,
) -> Result<GenericListViewArray<OffsetSize>, ArrowError>
pub fn try_new( field: Arc<Field>, offsets: ScalarBuffer<OffsetSize>, sizes: ScalarBuffer<OffsetSize>, values: Arc<dyn Array>, nulls: Option<NullBuffer>, ) -> Result<GenericListViewArray<OffsetSize>, ArrowError>
Create a new GenericListViewArray
from the provided parts
§Errors
Errors if
offsets.len() != sizes.len()
offsets.len() != nulls.len()
offsets[i] > values.len()
!field.is_nullable() && values.is_nullable()
field.data_type() != values.data_type()
0 <= offsets[i] <= length of the child array
0 <= offsets[i] + size[i] <= length of the child array
pub fn new(
field: Arc<Field>,
offsets: ScalarBuffer<OffsetSize>,
sizes: ScalarBuffer<OffsetSize>,
values: Arc<dyn Array>,
nulls: Option<NullBuffer>,
) -> GenericListViewArray<OffsetSize>
pub fn new( field: Arc<Field>, offsets: ScalarBuffer<OffsetSize>, sizes: ScalarBuffer<OffsetSize>, values: Arc<dyn Array>, nulls: Option<NullBuffer>, ) -> GenericListViewArray<OffsetSize>
Create a new GenericListViewArray
from the provided parts
§Panics
Panics if Self::try_new
returns an error
pub fn new_null(
field: Arc<Field>,
len: usize,
) -> GenericListViewArray<OffsetSize>
pub fn new_null( field: Arc<Field>, len: usize, ) -> GenericListViewArray<OffsetSize>
Create a new GenericListViewArray
of length len
where all values are null
pub fn into_parts(
self,
) -> (Arc<Field>, ScalarBuffer<OffsetSize>, ScalarBuffer<OffsetSize>, Arc<dyn Array>, Option<NullBuffer>)
pub fn into_parts( self, ) -> (Arc<Field>, ScalarBuffer<OffsetSize>, ScalarBuffer<OffsetSize>, Arc<dyn Array>, Option<NullBuffer>)
Deconstruct this array into its constituent parts
pub fn offsets(&self) -> &ScalarBuffer<OffsetSize>
pub fn offsets(&self) -> &ScalarBuffer<OffsetSize>
Returns a reference to the offsets of this list
Unlike Self::value_offsets
this returns the ScalarBuffer
allowing for zero-copy cloning
pub fn sizes(&self) -> &ScalarBuffer<OffsetSize>
pub fn sizes(&self) -> &ScalarBuffer<OffsetSize>
Returns a reference to the sizes of this list
Unlike Self::value_sizes
this returns the ScalarBuffer
allowing for zero-copy cloning
pub fn value_type(&self) -> DataType
pub fn value_type(&self) -> DataType
Returns a clone of the value type of this list.
pub unsafe fn value_unchecked(&self, i: usize) -> Arc<dyn Array>
pub unsafe fn value_unchecked(&self, i: usize) -> Arc<dyn Array>
Returns ith value of this list view array.
§Safety
Caller must ensure that the index is within the array bounds
pub fn value_offsets(&self) -> &[OffsetSize]
pub fn value_offsets(&self) -> &[OffsetSize]
Returns the offset values in the offsets buffer
pub fn value_sizes(&self) -> &[OffsetSize]
pub fn value_sizes(&self) -> &[OffsetSize]
Returns the sizes values in the offsets buffer
pub fn value_size(&self, i: usize) -> OffsetSize
pub fn value_size(&self, i: usize) -> OffsetSize
Returns the size for value at index i
.
pub fn value_offset(&self, i: usize) -> OffsetSize
pub fn value_offset(&self, i: usize) -> OffsetSize
Returns the offset for value at index i
.
pub fn iter(&self) -> ArrayIter<&GenericListViewArray<OffsetSize>> ⓘ
pub fn iter(&self) -> ArrayIter<&GenericListViewArray<OffsetSize>> ⓘ
Constructs a new iterator
pub fn slice(
&self,
offset: usize,
length: usize,
) -> GenericListViewArray<OffsetSize>
pub fn slice( &self, offset: usize, length: usize, ) -> GenericListViewArray<OffsetSize>
Returns a zero-copy slice of this array with the indicated offset and length.
Trait Implementations§
§impl<OffsetSize> Array for GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,
impl<OffsetSize> Array for GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,
§fn slice(&self, offset: usize, length: usize) -> Arc<dyn Array>
fn slice(&self, offset: usize, length: usize) -> Arc<dyn Array>
§fn shrink_to_fit(&mut self)
fn shrink_to_fit(&mut self)
§fn offset(&self) -> usize
fn offset(&self) -> usize
0
. Read more§fn nulls(&self) -> Option<&NullBuffer>
fn nulls(&self) -> Option<&NullBuffer>
§fn logical_null_count(&self) -> usize
fn logical_null_count(&self) -> usize
§fn get_buffer_memory_size(&self) -> usize
fn get_buffer_memory_size(&self) -> usize
§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.§fn logical_nulls(&self) -> Option<NullBuffer>
fn logical_nulls(&self) -> Option<NullBuffer>
NullBuffer
that represents the logical
null values of this array, if any. Read more§fn null_count(&self) -> usize
fn null_count(&self) -> usize
§fn is_nullable(&self) -> bool
fn is_nullable(&self) -> bool
false
if the array is guaranteed to not contain any logical nulls Read more§impl<OffsetSize> ArrayAccessor for &GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,
impl<OffsetSize> ArrayAccessor for &GenericListViewArray<OffsetSize>where
OffsetSize: OffsetSizeTrait,
§fn value(
&self,
index: usize,
) -> <&GenericListViewArray<OffsetSize> as ArrayAccessor>::Item
fn value( &self, index: usize, ) -> <&GenericListViewArray<OffsetSize> as ArrayAccessor>::Item
i
Read more§unsafe fn value_unchecked(
&self,
index: usize,
) -> <&GenericListViewArray<OffsetSize> as ArrayAccessor>::Item
unsafe fn value_unchecked( &self, index: usize, ) -> <&GenericListViewArray<OffsetSize> as ArrayAccessor>::Item
i
Read more§impl<OffsetSize> Clone for GenericListViewArray<OffsetSize>where
OffsetSize: Clone + OffsetSizeTrait,
impl<OffsetSize> Clone for GenericListViewArray<OffsetSize>where
OffsetSize: Clone + OffsetSizeTrait,
§fn clone(&self) -> GenericListViewArray<OffsetSize>
fn clone(&self) -> GenericListViewArray<OffsetSize>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more