Struct arrow_array::array::FixedSizeListArray
source · pub struct FixedSizeListArray { /* private fields */ }
Expand description
An array of [fixed length lists], similar to JSON arrays
(e.g. ["A", "B"]
).
Lists are represented using a values
child
array where each list has a fixed size of value_length
.
Use FixedSizeListBuilder
to construct a FixedSizeListArray
.
Representation
A FixedSizeListArray
can represent a list of values of any other
supported Arrow type. Each element of the FixedSizeListArray
itself is
a list which may contain NULL and non-null values,
or may itself be NULL.
For example, this FixedSizeListArray
stores lists of strings:
┌─────────────┐
│ [A,B] │
├─────────────┤
│ NULL │
├─────────────┤
│ [C,NULL] │
└─────────────┘
The values
of this FixedSizeListArray
s are stored in a child
StringArray
where logical null values take up values_length
slots in the array
as shown in the following diagram. The logical values
are shown on the left, and the actual FixedSizeListArray
encoding on the right
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
┌ ─ ─ ─ ─ ─ ─ ─ ─┐
┌─────────────┐ │ ┌───┐ ┌───┐ ┌──────┐ │
│ [A,B] │ │ 1 │ │ │ 1 │ │ A │ │ 0
├─────────────┤ │ ├───┤ ├───┤ ├──────┤ │
│ NULL │ │ 0 │ │ │ 1 │ │ B │ │ 1
├─────────────┤ │ ├───┤ ├───┤ ├──────┤ │
│ [C,NULL] │ │ 1 │ │ │ 0 │ │ ???? │ │ 2
└─────────────┘ │ └───┘ ├───┤ ├──────┤ │
| │ 0 │ │ ???? │ │ 3
Logical Values │ Validity ├───┤ ├──────┤ │
(nulls) │ │ 1 │ │ C │ │ 4
│ ├───┤ ├──────┤ │
│ │ 0 │ │ ???? │ │ 5
│ └───┘ └──────┘ │
│ Values │
│ FixedSizeListArray (Array) │
└ ─ ─ ─ ─ ─ ─ ─ ─┘
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
Example
// Construct a value array
let value_data = ArrayData::builder(DataType::Int32)
.len(9)
.add_buffer(Buffer::from_slice_ref(&[0, 1, 2, 3, 4, 5, 6, 7, 8]))
.build()
.unwrap();
let list_data_type = DataType::FixedSizeList(
Arc::new(Field::new("item", DataType::Int32, false)),
3,
);
let list_data = ArrayData::builder(list_data_type.clone())
.len(3)
.add_child_data(value_data.clone())
.build()
.unwrap();
let list_array = FixedSizeListArray::from(list_data);
let list0 = list_array.value(0);
let list1 = list_array.value(1);
let list2 = list_array.value(2);
assert_eq!( &[0, 1, 2], list0.as_any().downcast_ref::<Int32Array>().unwrap().values());
assert_eq!( &[3, 4, 5], list1.as_any().downcast_ref::<Int32Array>().unwrap().values());
assert_eq!( &[6, 7, 8], list2.as_any().downcast_ref::<Int32Array>().unwrap().values());
Implementations§
source§impl FixedSizeListArray
impl FixedSizeListArray
sourcepub fn new(
field: FieldRef,
size: i32,
values: ArrayRef,
nulls: Option<NullBuffer>
) -> Self
pub fn new( field: FieldRef, size: i32, values: ArrayRef, nulls: Option<NullBuffer> ) -> Self
Create a new FixedSizeListArray
with size
element size, panicking on failure
Panics
Panics if Self::try_new
returns an error
sourcepub fn try_new(
field: FieldRef,
size: i32,
values: ArrayRef,
nulls: Option<NullBuffer>
) -> Result<Self, ArrowError>
pub fn try_new( field: FieldRef, size: i32, values: ArrayRef, nulls: Option<NullBuffer> ) -> Result<Self, ArrowError>
Create a new FixedSizeListArray
from the provided parts, returning an error on failure
Errors
size < 0
values.len() / size != nulls.len()
values.data_type() != field.data_type()
!field.is_nullable() && !nulls.expand(size).contains(values.logical_nulls())
sourcepub fn new_null(field: FieldRef, size: i32, len: usize) -> Self
pub fn new_null(field: FieldRef, size: i32, len: usize) -> Self
Create a new FixedSizeListArray
of length len
where all values are null
Panics
Panics if
size < 0
size * len
would overflowusize
sourcepub fn into_parts(self) -> (FieldRef, i32, ArrayRef, Option<NullBuffer>)
pub fn into_parts(self) -> (FieldRef, i32, ArrayRef, Option<NullBuffer>)
Deconstruct this array into its constituent parts
sourcepub fn value_type(&self) -> DataType
pub fn value_type(&self) -> DataType
Returns a clone of the value type of this list.
sourcepub fn value_offset(&self, i: usize) -> i32
pub fn value_offset(&self, i: usize) -> i32
Returns the offset for value at index i
.
Note this doesn’t do any bound checking, for performance reason.
sourcepub const fn value_length(&self) -> i32
pub const fn value_length(&self) -> i32
Returns the length for an element.
All elements have the same length as the array is a fixed size.
sourcepub fn slice(&self, offset: usize, len: usize) -> Self
pub fn slice(&self, offset: usize, len: 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, length: i32) -> 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, length: i32) -> Selfwhere T: ArrowPrimitiveType, P: IntoIterator<Item = Option<<T as ArrowPrimitiveType>::Native>>, I: IntoIterator<Item = Option<P>>,
Creates a FixedSizeListArray
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), Some(45)]),
];
let list_array = FixedSizeListArray::from_iter_primitive::<Int32Type, _, _>(data, 3);
println!("{:?}", list_array);
sourcepub fn iter(&self) -> FixedSizeListIter<'_>
pub fn iter(&self) -> FixedSizeListIter<'_>
constructs a new iterator
Trait Implementations§
source§impl Array for FixedSizeListArray
impl Array for FixedSizeListArray
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 moresource§impl<'a> ArrayAccessor for &'a FixedSizeListArray
impl<'a> ArrayAccessor for &'a FixedSizeListArray
source§impl ArrayAccessor for FixedSizeListArray
impl ArrayAccessor for FixedSizeListArray
source§impl Clone for FixedSizeListArray
impl Clone for FixedSizeListArray
source§fn clone(&self) -> FixedSizeListArray
fn clone(&self) -> FixedSizeListArray
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for FixedSizeListArray
impl Debug for FixedSizeListArray
source§impl From<ArrayData> for FixedSizeListArray
impl From<ArrayData> for FixedSizeListArray
source§impl From<FixedSizeListArray> for ArrayData
impl From<FixedSizeListArray> for ArrayData
source§fn from(array: FixedSizeListArray) -> Self
fn from(array: FixedSizeListArray) -> Self
source§impl From<FixedSizeListArray> for FixedSizeBinaryArray
impl From<FixedSizeListArray> for FixedSizeBinaryArray
Creates a FixedSizeBinaryArray
from FixedSizeList<u8>
array