Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-stream/src/nodes/io_sources/ndjson/chunk_reader.rs
6939 views
1
use polars_core::schema::SchemaRef;
2
use polars_error::PolarsResult;
3
use polars_io::ndjson;
4
use polars_io::prelude::parse_ndjson;
5
use polars_plan::dsl::NDJsonReadOptions;
6
7
use crate::nodes::compute_node_prelude::*;
8
9
/// NDJSON chunk reader.
10
#[derive(Default)]
11
pub(super) struct ChunkReader {
12
projected_schema: SchemaRef,
13
ignore_errors: bool,
14
}
15
16
impl ChunkReader {
17
pub(super) fn try_new(
18
options: &NDJsonReadOptions,
19
projected_schema: &SchemaRef,
20
) -> PolarsResult<Self> {
21
let projected_schema = projected_schema.clone();
22
23
Ok(Self {
24
projected_schema,
25
ignore_errors: options.ignore_errors,
26
})
27
}
28
29
pub(super) fn read_chunk(&self, chunk: &[u8]) -> PolarsResult<DataFrame> {
30
if self.projected_schema.is_empty() {
31
Ok(DataFrame::empty_with_height(ndjson::count_rows(chunk)))
32
} else {
33
parse_ndjson(chunk, None, &self.projected_schema, self.ignore_errors)
34
}
35
}
36
}
37
38