69个版本 (重大变更)
52.2.0 | 2024年7月28日 |
---|---|
52.0.0 | 2024年6月6日 |
51.0.0 | 2024年3月18日 |
50.0.0 | 2024年1月12日 |
3.0.0 | 2021年1月26日 |
#1096 在 过程宏
每月12,582次下载
用于 2 crate
2.5MB
55K SLoC
Parquet Derive
一个用于派生任意、简单的结构体的 RecordWriter
和 RecordReader
的crate。这不会为任意嵌套的结构体生成读取器或写入器。它仅适用于原始类型和一些泛型结构和各种引用级别。请参阅功能清单以了解目前支持的内容。
Derive还支持chrono时间库。您必须启用chrono
功能才能获得此支持。
用法
将此添加到您的Cargo.toml中
[dependencies]
parquet = "39.0.0"
parquet_derive = "39.0.0"
并将其添加到您的crate根目录中
extern crate parquet;
#[macro_use] extern crate parquet_derive;
为您的结构体派生RecordWriter
的示例用法
use parquet;
use parquet::record::RecordWriter;
#[derive(ParquetRecordWriter)]
struct ACompleteRecord<'a> {
pub a_bool: bool,
pub a_str: &'a str,
pub a_string: String,
pub a_borrowed_string: &'a String,
pub maybe_a_str: Option<&'a str>,
pub magic_number: i32,
pub low_quality_pi: f32,
pub high_quality_pi: f64,
pub maybe_pi: Option<f32>,
pub maybe_best_pi: Option<f64>,
}
// Initialize your parquet file
let mut writer = SerializedFileWriter::new(file, schema, props).unwrap();
let mut row_group = writer.next_row_group().unwrap();
// Build up your records
let chunks = vec![ACompleteRecord{...}];
// The derived `RecordWriter` takes over here
(&chunks[..]).write_to_row_group(&mut row_group);
writer.close_row_group(row_group).unwrap();
writer.close().unwrap();
为您的结构体派生RecordReader
的示例用法
use parquet::file::{serialized_reader::SerializedFileReader, reader::FileReader};
use parquet_derive::ParquetRecordReader;
#[derive(ParquetRecordReader)]
struct ACompleteRecord {
pub a_bool: bool,
pub a_string: String,
pub i16: i16,
pub i32: i32,
pub u64: u64,
pub isize: isize,
pub float: f32,
pub double: f64,
pub now: chrono::NaiveDateTime,
pub byte_vec: Vec<u8>,
}
// Initialize your parquet file
let reader = SerializedFileReader::new(file).unwrap();
let mut row_group = reader.get_row_group(0).unwrap();
// create your records vector to read into
let mut chunks: Vec<ACompleteRecord> = Vec::new();
// The derived `RecordReader` takes over here
chunks.read_from_row_group(&mut *row_group, 1).unwrap();
特性
-
支持写入
String
、&str
、bool
、i32
、f32
、f64
、Vec<u8>
-
支持写入字典
-
支持写入逻辑类型,如时间戳
-
为写入
Option
派生definition_levels -
为写入嵌套结构派生definition levels
-
派生写入tuple结构体
-
派生写入
tuple
容器类型 -
支持读取
String
,&str
,bool
,i32
,f32
,f64
,Vec<u8>
-
支持读取/写入字典
-
支持读取/写入类似时间戳的逻辑类型
-
处理读取时
Option
的 definition_levels -
处理读取时嵌套结构的 definition levels
-
推导读取/写入元组结构
-
推导读取/写入
tuple
容器类型
要求
- 与
parquet-rs
相同
测试
测试 *_derive
需要一个中间的 crate。前往 parquet_derive_test
并运行 cargo test
执行单元测试。
文档
要构建文档,运行 cargo doc --no-deps
。要编译并在浏览器中查看,运行 cargo doc --no-deps --open
。
许可证
根据 Apache License,版本 2.0 许可:http://www.apache.org/licenses/LICENSE-2.0.
依赖
约 4-10MB
约 96K SLoC