Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-lazy/src/scan/anonymous_scan.rs
6939 views
1
use polars_core::prelude::*;
2
use polars_io::{HiveOptions, RowIndex};
3
use polars_utils::slice_enum::Slice;
4
5
use crate::prelude::*;
6
7
#[derive(Clone)]
8
pub struct ScanArgsAnonymous {
9
pub infer_schema_length: Option<usize>,
10
pub schema: Option<SchemaRef>,
11
pub skip_rows: Option<usize>,
12
pub n_rows: Option<usize>,
13
pub row_index: Option<RowIndex>,
14
pub name: &'static str,
15
}
16
17
impl Default for ScanArgsAnonymous {
18
fn default() -> Self {
19
Self {
20
infer_schema_length: None,
21
skip_rows: None,
22
n_rows: None,
23
schema: None,
24
row_index: None,
25
name: "ANONYMOUS SCAN",
26
}
27
}
28
}
29
impl LazyFrame {
30
pub fn anonymous_scan(
31
function: Arc<dyn AnonymousScan>,
32
args: ScanArgsAnonymous,
33
) -> PolarsResult<Self> {
34
let schema = match args.schema {
35
Some(s) => s,
36
None => function.schema(args.infer_schema_length)?,
37
};
38
39
let mut lf: LazyFrame = DslBuilder::anonymous_scan(
40
function,
41
AnonymousScanOptions {
42
skip_rows: args.skip_rows,
43
fmt_str: args.name,
44
},
45
UnifiedScanArgs {
46
schema: Some(schema),
47
cloud_options: None,
48
hive_options: HiveOptions::new_disabled(),
49
rechunk: false,
50
cache: false,
51
glob: false,
52
projection: None,
53
column_mapping: None,
54
default_values: None,
55
row_index: None,
56
pre_slice: args.n_rows.map(|len| Slice::Positive { offset: 0, len }),
57
cast_columns_policy: CastColumnsPolicy::ERROR_ON_MISMATCH,
58
missing_columns_policy: MissingColumnsPolicy::Raise,
59
extra_columns_policy: ExtraColumnsPolicy::Raise,
60
include_file_paths: None,
61
deletion_files: None,
62
},
63
)?
64
.build()
65
.into();
66
67
if let Some(rc) = args.row_index {
68
lf = lf.with_row_index(rc.name.clone(), Some(rc.offset))
69
};
70
71
Ok(lf)
72
}
73
}
74
75