#split #csv #csv-tsv #tsv

shard-csv

一个辅助将CSV/TSV文件分割成多个不相交文件的库

1个不稳定版本

0.1.0 2021年11月16日

#960文件系统

MIT/Apache

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