Struct FixedSizeListArray
pub struct FixedSizeListArray {
data_type: DataType,
values: Arc<dyn Array>,
nulls: Option<NullBuffer>,
value_length: i32,
len: usize,
}
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_list_field(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());
Fields§
§data_type: DataType
§values: Arc<dyn Array>
§nulls: Option<NullBuffer>
§value_length: i32
§len: usize
Implementations§
§impl FixedSizeListArray
impl FixedSizeListArray
pub fn new(
field: Arc<Field>,
size: i32,
values: Arc<dyn Array>,
nulls: Option<NullBuffer>,
) -> FixedSizeListArray
pub fn new( field: Arc<Field>, size: i32, values: Arc<dyn Array>, nulls: Option<NullBuffer>, ) -> FixedSizeListArray
Create a new FixedSizeListArray
with size
element size, panicking on failure
§Panics
Panics if Self::try_new
returns an error
pub fn try_new(
field: Arc<Field>,
size: i32,
values: Arc<dyn Array>,
nulls: Option<NullBuffer>,
) -> Result<FixedSizeListArray, ArrowError>
pub fn try_new( field: Arc<Field>, size: i32, values: Arc<dyn Array>, nulls: Option<NullBuffer>, ) -> Result<FixedSizeListArray, 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())
pub fn new_null(field: Arc<Field>, size: i32, len: usize) -> FixedSizeListArray
pub fn new_null(field: Arc<Field>, size: i32, len: usize) -> FixedSizeListArray
Create a new FixedSizeListArray
of length len
where all values are null
§Panics
Panics if
size < 0
size * len
would overflowusize
pub fn into_parts(self) -> (Arc<Field>, i32, Arc<dyn Array>, Option<NullBuffer>)
pub fn into_parts(self) -> (Arc<Field>, i32, Arc<dyn Array>, Option<NullBuffer>)
Deconstruct this array into its constituent parts
pub fn value_type(&self) -> DataType
pub fn value_type(&self) -> DataType
Returns a clone of the value type of this list.
pub 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.
pub 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.
pub fn slice(&self, offset: usize, len: usize) -> FixedSizeListArray
pub fn slice(&self, offset: usize, len: usize) -> FixedSizeListArray
Returns a zero-copy slice of this array with the indicated offset and length.
pub fn from_iter_primitive<T, P, I>(iter: I, length: i32) -> FixedSizeListArraywhere
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) -> FixedSizeListArraywhere
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);
pub fn iter(&self) -> ArrayIter<&FixedSizeListArray> ⓘ
pub fn iter(&self) -> ArrayIter<&FixedSizeListArray> ⓘ
constructs a new iterator
Trait Implementations§
§impl Array for FixedSizeListArray
impl Array for FixedSizeListArray
§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 ArrayAccessor for &FixedSizeListArray
impl ArrayAccessor for &FixedSizeListArray
§fn value(&self, index: usize) -> <&FixedSizeListArray as ArrayAccessor>::Item
fn value(&self, index: usize) -> <&FixedSizeListArray as ArrayAccessor>::Item
i
Read more§unsafe fn value_unchecked(
&self,
index: usize,
) -> <&FixedSizeListArray as ArrayAccessor>::Item
unsafe fn value_unchecked( &self, index: usize, ) -> <&FixedSizeListArray as ArrayAccessor>::Item
i
Read more§impl ArrayAccessor for FixedSizeListArray
impl ArrayAccessor for FixedSizeListArray
§fn value(&self, index: usize) -> <FixedSizeListArray as ArrayAccessor>::Item
fn value(&self, index: usize) -> <FixedSizeListArray as ArrayAccessor>::Item
i
Read more§unsafe fn value_unchecked(
&self,
index: usize,
) -> <FixedSizeListArray as ArrayAccessor>::Item
unsafe fn value_unchecked( &self, index: usize, ) -> <FixedSizeListArray as ArrayAccessor>::Item
i
Read more§impl Clone for FixedSizeListArray
impl Clone for FixedSizeListArray
§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 more§impl Debug for FixedSizeListArray
impl Debug for FixedSizeListArray
§impl From<ArrayData> for FixedSizeListArray
impl From<ArrayData> for FixedSizeListArray
§fn from(data: ArrayData) -> FixedSizeListArray
fn from(data: ArrayData) -> FixedSizeListArray
§impl From<FixedSizeListArray> for ArrayData
impl From<FixedSizeListArray> for ArrayData
§fn from(array: FixedSizeListArray) -> ArrayData
fn from(array: FixedSizeListArray) -> ArrayData
§impl From<FixedSizeListArray> for FixedSizeBinaryArray
impl From<FixedSizeListArray> for FixedSizeBinaryArray
Creates a FixedSizeBinaryArray
from FixedSizeList<u8>
array