1个不稳定版本
0.1.0 | 2021年11月16日 |
---|
#960 在 文件系统
25KB
333 行
shard-csv
shard-csv
是一个将输入CSV文件根据某些键选择器分割到输出碎片中的crate。当您有一些大型数据集,并且想要比GNU split有更多控制时,请使用它。
用法
在Cargo.toml中包含它: shard-csv = "0.1.0"
。
示例用法首先需要创建一个CSV读取器。请注意,shard-csv
严重依赖于csv
crate,它实际上使用并导出它
let mut reader = shard_csv::csv::ReaderBuilder::new()
.from_path("input_data.csv")
.expect("Failed to create reader from file");
然后您可以创建一个碎片化的CSV写入器,它
- 知道如何识别每一行属于哪个碎片,
- 可以将每个碎片写入一个文件或多个文件,按行数或字节数分割,
- 可以任意创建输出流(例如,gzip压缩的),
- 在流完成时通知您
let mut writer = ShardedWriterBuilder::new_from_csv_reader(&mut reader)
.expect("Failed to create writer")
.with_key_selector(|row| row.get(2).unwrap_or("unknown").to_string())
.with_output_shard_naming(|key, seq| format!("data.part{}.csv", key, seq))
.with_output_splitting(FileSplitting::SplitAfterBytes(1024 * 1024))
.on_file_completion(|path, key| {
println!("The file {} is now ready for shard {}", path.display(), key);
// Do something more with the completed file if you want.
});
writer.process_csv(&mut reader).ok();
依赖关系
~1.3–1.7MB
~21K SLoC