Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-plan/src/plans/functions/count.rs
8430 views
1
use super::*;
2
3
pub fn count_rows(
4
sources: &ScanSources,
5
scan_type: &FileScanIR,
6
alias: Option<PlSmallStr>,
7
) -> PolarsResult<DataFrame> {
8
feature_gated!("csv", {
9
let count: PolarsResult<usize> = match scan_type {
10
#[cfg(feature = "csv")]
11
FileScanIR::Csv { options } => count_all_rows_csv(sources, options),
12
_ => unreachable!(),
13
};
14
let count = count?;
15
let count: IdxSize = count.try_into().map_err(
16
|_| polars_err!(ComputeError: "count of {} exceeded maximum row size", count),
17
)?;
18
let column_name = alias.unwrap_or(PlSmallStr::from_static(crate::constants::LEN));
19
20
Ok(unsafe { DataFrame::new_unchecked(1, vec![Column::new(column_name, [count])]) })
21
})
22
}
23
24
#[cfg(feature = "csv")]
25
fn count_all_rows_csv(
26
sources: &ScanSources,
27
options: &polars_io::prelude::CsvReadOptions,
28
) -> PolarsResult<usize> {
29
let parse_options = options.get_parse_options();
30
31
sources
32
.iter()
33
.map(|source| match source {
34
ScanSourceRef::Path(path) => polars_io::csv::read::count_rows(
35
path.clone(),
36
parse_options.quote_char,
37
parse_options.comment_prefix.as_ref(),
38
parse_options.eol_char,
39
options.has_header,
40
options.skip_lines,
41
options.skip_rows,
42
options.skip_rows_after_header,
43
),
44
_ => {
45
let memslice = source.to_memslice()?;
46
47
polars_io::csv::read::count_rows_from_slice_par(
48
memslice,
49
parse_options.quote_char,
50
parse_options.comment_prefix.as_ref(),
51
parse_options.eol_char,
52
options.has_header,
53
options.skip_lines,
54
options.skip_rows,
55
options.skip_rows_after_header,
56
)
57
},
58
})
59
.sum()
60
}
61
62