1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
pub mod predicates;
mod read;
mod read_impl;
mod write;
use super::*;
pub use read::*;
pub use write::*;
#[cfg(test)]
mod test {
use crate::prelude::*;
use polars_core::{df, prelude::*};
use std::fs::File;
use std::io::Cursor;
#[test]
fn test_parquet() {
if let Ok(r) = File::open("data/simple.parquet") {
let reader = ParquetReader::new(r);
let df = reader.finish().unwrap();
assert_eq!(df.get_column_names(), ["a", "b"]);
assert_eq!(df.shape(), (3, 2));
}
}
#[test]
#[cfg(all(feature = "dtype-datetime", feature = "parquet"))]
fn test_parquet_datetime_round_trip() -> Result<()> {
use std::io::{Cursor, Seek, SeekFrom};
let mut f = Cursor::new(vec![]);
let mut df = df![
"datetime" => [Some(191845729i64), Some(89107598), None, Some(3158971092)]
]?;
df.try_apply("datetime", |s| {
s.cast(&DataType::Datetime(TimeUnit::Nanoseconds, None))
})?;
ParquetWriter::new(&mut f).finish(&mut df)?;
f.seek(SeekFrom::Start(0))?;
let read = ParquetReader::new(f).finish()?;
assert!(read.frame_equal_missing(&df));
Ok(())
}
#[test]
fn test_read_parquet_with_projection() {
let mut buf: Cursor<Vec<u8>> = Cursor::new(Vec::new());
let mut df = df!("a" => [1, 2, 3], "b" => [2, 3, 4], "c" => [3, 4, 5]).unwrap();
ParquetWriter::new(&mut buf)
.finish(&mut df)
.expect("parquet writer");
buf.set_position(0);
let expected = df!("b" => [2, 3, 4], "c" => [3, 4, 5]).unwrap();
let df_read = ParquetReader::new(buf)
.with_projection(Some(vec![1, 2]))
.finish()
.unwrap();
assert_eq!(df_read.shape(), (3, 2));
df_read.frame_equal(&expected);
}
#[test]
fn test_read_parquet_with_columns() {
let mut buf: Cursor<Vec<u8>> = Cursor::new(Vec::new());
let mut df = df!("a" => [1, 2, 3], "b" => [2, 3, 4], "c" => [3, 4, 5]).unwrap();
ParquetWriter::new(&mut buf)
.finish(&mut df)
.expect("parquet writer");
buf.set_position(0);
let expected = df!("b" => [2, 3, 4], "c" => [3, 4, 5]).unwrap();
let df_read = ParquetReader::new(buf)
.with_columns(Some(vec!["c".to_string(), "b".to_string()]))
.finish()
.unwrap();
assert_eq!(df_read.shape(), (3, 2));
df_read.frame_equal(&expected);
}
}