Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-parquet/src/arrow/write/binary/nested.rs
6940 views
1
use arrow::array::{Array, BinaryArray};
2
use arrow::offset::Offset;
3
use polars_error::PolarsResult;
4
5
use super::super::{WriteOptions, nested, utils};
6
use super::basic::{build_statistics, encode_plain};
7
use crate::arrow::write::Nested;
8
use crate::parquet::encoding::Encoding;
9
use crate::parquet::page::DataPage;
10
use crate::parquet::schema::types::PrimitiveType;
11
use crate::read::schema::is_nullable;
12
use crate::write::EncodeNullability;
13
14
pub fn array_to_page<O>(
15
array: &BinaryArray<O>,
16
options: WriteOptions,
17
type_: PrimitiveType,
18
nested: &[Nested],
19
) -> PolarsResult<DataPage>
20
where
21
O: Offset,
22
{
23
let is_optional = is_nullable(&type_.field_info);
24
let encode_options = EncodeNullability::new(is_optional);
25
26
let mut buffer = vec![];
27
let (repetition_levels_byte_length, definition_levels_byte_length) =
28
nested::write_rep_and_def(options.version, nested, &mut buffer)?;
29
30
encode_plain(array, encode_options, &mut buffer);
31
32
let statistics = if options.has_statistics() {
33
Some(build_statistics(array, type_.clone(), &options.statistics))
34
} else {
35
None
36
};
37
38
utils::build_plain_page(
39
buffer,
40
nested::num_values(nested),
41
nested[0].len(),
42
array.null_count(),
43
repetition_levels_byte_length,
44
definition_levels_byte_length,
45
statistics,
46
type_,
47
options,
48
Encoding::Plain,
49
)
50
}
51
52