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_sinks2/components/partition_state.rs
7884 views
1
use std::sync::Arc;
2
3
use polars_core::frame::DataFrame;
4
5
use crate::nodes::io_sinks2::components::file_sink::FileSinkTaskData;
6
use crate::nodes::io_sinks2::components::size::RowCountAndSize;
7
8
#[derive(Default)]
9
pub struct PartitionState {
10
pub buffered_rows: DataFrame,
11
pub total_size: RowCountAndSize,
12
pub sinked_size: RowCountAndSize,
13
pub num_sink_opens: usize,
14
pub keys_df: Arc<DataFrame>,
15
pub file_sink_task_data: Option<FileSinkTaskData>,
16
}
17
18
impl PartitionState {
19
pub fn buffered_size(&self) -> RowCountAndSize {
20
let num_rows = self
21
.total_size
22
.num_rows
23
.checked_sub(self.sinked_size.num_rows)
24
.unwrap();
25
26
if num_rows == 0 {
27
return RowCountAndSize::default();
28
}
29
30
assert_eq!(
31
usize::try_from(num_rows).unwrap(),
32
self.buffered_rows.height()
33
);
34
35
RowCountAndSize {
36
num_rows,
37
num_bytes: self
38
.total_size
39
.num_bytes
40
.saturating_sub(self.sinked_size.num_bytes),
41
}
42
}
43
}
44
45