6 个版本
使用旧的 Rust 2015
0.2.0 | 2021年11月23日 |
---|---|
0.1.4 | 2016年2月11日 |
0.1.1 | 2016年1月31日 |
#7 in #handles
26KB
540 行
rust-sequencefile
Rust 的 Hadoop SequenceFile 库
# Cargo.toml
[dependencies]
sequencefile = "0.2.0"
状态
原型状态!我正在学习 Rust。 :) 欢迎反馈。
不幸的是,这意味着 API 将会更改。如果您依赖此软件包,请现在完全限定您的版本。
目前支持读取各种类型的序列文件。处理未压缩的序列文件以及块/记录压缩文件(deflate、gzip 和 bzip2)。LZO 和 Snappy 目前不支持。
还有很多工作要做
- Varint 解码
- 块大小使用 Varint 编写
- 块解压缩
- 支持 Gzip
- 支持 Bzip2
- Sequencefile 元数据
- 更好的错误处理
- 测试
- 更好的错误处理2
- 更多的测试
- 更好的文档
- 支持 Snappy
- 支持 CRC 文件
- '可序列化',例如通用反序列化常见 Hadoop 可序列化类型
- 写入器
- 优雅地处理第 4 版序列文件
- 零拷贝实现。
- 支持 LZO
基准测试
目前还没有正式的基准测试。然而,在我的早期 2012 年 MBP 上,98.4% 的 CPU 时间用于 miniz,产生了 ~125MB/s 的解压缩数据。
用法
let path = Path::new("/path/to/seqfile");
let file = File::open(&path).unwrap();
let seqfile = sequencefile::Reader::new(file).expect("Failed to open sequence file.");
for kv in seqfile {
println!("{:?}", kv); // Some(([123, 123], [456, 456]))
}
// Until there's automatic deserialization, you can do something like this:
// VERY hacky
let kvs = seqfile.map(|e| e.unwrap()).map(|(key, value)| {
(BigEndian::read_i64(&key),
String::from_utf8_lossy(&value[2..value.len()]).to_string())
});
for (k,v) in kvs {
println!("key: {}, value: {}", k, v);
}
许可
rust-sequencefile 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发,部分受各种 BSD-like 许可证的约束。
有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖项
~1.5MB
~24K SLoC