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