28个版本 (6个重大更新)
新 0.8.2 | 2024年8月16日 |
---|---|
0.7.7 | 2024年6月26日 |
0.5.1 | 2024年3月1日 |
0.3.4 | 2023年8月1日 |
0.1.0 |
|
#72 in 数据结构
5,029 个月下载量
400KB
10K SLoC
Apache Arrow的实验性(进行中)静态类型实现。
此crate提供生成类型的方法,以支持在Arrow的内存数据结构中读取和写入抽象数据类型的实例。
原因
arrow
crate提供了在数组类型仅在运行时已知时才合理的API。其中许多API需要使用trait对象和向下转型。然而,对于在编译时已知类型的应用程序,这些API不便于使用。- 嵌套数组类型的构建器既复杂又容易出错。
有其他crate旨在通过提供derive宏来防止用户维护数组构建器代码。这些构建器通常产生类型擦除数组,而此crate只提供完全静态类型的数组。
目标和非目标
目标
- 提供生产就绪的、完全静态类型、安全且高效的Arrow数组实现
- 使所有使用Rust的人都能轻松受益于Arrow生态系统
- 与arrow crate提供零拷贝互操作性
- 支持自定义缓冲区实现,例如支持加速器
- 探索使用Rust类型系统表达Arrow概念,并将Rust概念映射到Arrow
非目标
- 支持运行时任意数组类型(arrow crate支持此用例)
- 提供计算内核
- 取代其他Arrow实现
示例
use narrow::{
array::{StructArray, UnionArray},
ArrayType, Length,
};
#[derive(ArrayType, Default, Clone, Debug, PartialEq, Eq)]
struct Foo {
a: bool,
b: u32,
c: Option<String>,
}
#[derive(ArrayType, Default, Clone, Debug, PartialEq, Eq)]
struct Bar(Vec<u8>);
#[derive(ArrayType, Clone, Debug, PartialEq, Eq)]
enum FooBar {
Foo(Foo),
Bar(Bar),
None,
}
let foos = vec![
Foo {
a: false,
b: 0,
c: None,
},
Foo {
a: true,
b: 42,
c: Some("hello world".to_owned()),
},
];
let struct_array = foos.clone().into_iter().collect::<StructArray<Foo>>();
assert_eq!(struct_array.len(), 2);
assert_eq!(struct_array.into_iter().collect::<Vec<_>>(), foos);
let foo_bars = vec![
FooBar::Foo(Foo {
a: true,
b: 42,
c: Some("hello world".to_owned()),
}),
FooBar::Bar(Bar(vec![1, 2, 3, 4])),
FooBar::None,
FooBar::None,
];
let union_array = foo_bars
.clone()
.into_iter()
.collect::<UnionArray<FooBar, 3>>();
assert_eq!(union_array.len(), 4);
assert_eq!(union_array.into_iter().collect::<Vec<_>>(), foo_bars);
功能
crate支持以下可选功能
derive
:添加ArrayType
derive支持。arrow-rs
:为arrow添加数组转换方法。uuid
:为 uuid::Uuid 添加了对ArrayType
的支持。
文档
最低支持的 Rust 版本
此crate最低支持的 Rust 版本是 Rust 1.70.0。
许可证
根据您的选择,许可协议为Apache License, Version 2.0或MIT license。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在本作品中的贡献都应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~0–7MB
~32K SLoC