1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use arrow::array::{PrimitiveArray, StructArray};
use arrow::chunk::Chunk;
use arrow::datatypes::{DataType, Field};
use arrow::types::NativeType;
use crate::prelude::*;
pub fn chunk_to_struct(chunk: Chunk<ArrayRef>, fields: Vec<Field>) -> StructArray {
let dtype = DataType::Struct(fields);
StructArray::new(dtype, chunk.into_arrays(), None)
}
pub fn primitive_to_vec<T: NativeType>(arr: ArrayRef) -> Option<Vec<T>> {
let arr_ref = arr.as_any().downcast_ref::<PrimitiveArray<T>>().unwrap();
let mut buffer = arr_ref.values().clone();
drop(arr);
buffer.get_mut().map(std::mem::take)
}