Path: blob/main/crates/polars-parquet/src/arrow/write/primitive/nested.rs
6940 views
use arrow::array::{Array, PrimitiveArray};1use arrow::types::NativeType as ArrowNativeType;2use polars_error::PolarsResult;34use super::super::{WriteOptions, nested, utils};5use super::basic::{build_statistics, encode_plain};6use crate::arrow::read::schema::is_nullable;7use crate::arrow::write::Nested;8use crate::parquet::encoding::Encoding;9use crate::parquet::page::DataPage;10use crate::parquet::schema::types::PrimitiveType;11use crate::parquet::types::NativeType;12use crate::write::EncodeNullability;1314pub fn array_to_page<T, R>(15array: &PrimitiveArray<T>,16options: WriteOptions,17type_: PrimitiveType,18nested: &[Nested],19) -> PolarsResult<DataPage>20where21T: ArrowNativeType,22R: NativeType,23T: num_traits::AsPrimitive<R>,24{25let is_optional = is_nullable(&type_.field_info);26let encode_options = EncodeNullability::new(is_optional);2728let mut buffer = vec![];2930let (repetition_levels_byte_length, definition_levels_byte_length) =31nested::write_rep_and_def(options.version, nested, &mut buffer)?;3233let buffer = encode_plain(array, encode_options, buffer);3435let statistics = if options.has_statistics() {36Some(build_statistics(array, type_.clone(), &options.statistics).serialize())37} else {38None39};4041utils::build_plain_page(42buffer,43nested::num_values(nested),44nested[0].len(),45array.null_count(),46repetition_levels_byte_length,47definition_levels_byte_length,48statistics,49type_,50options,51Encoding::Plain,52)53}545556