23个不稳定版本 (4个重大变更)
新 0.6.8 | 2024年8月15日 |
---|---|
0.6.6 | 2024年7月10日 |
0.5.1 | 2024年2月6日 |
0.3.4 | 2023年8月1日 |
0.1.0 |
|
111 在 #apache-arrow
5,075 每月下载量
在 narrow 中使用
105KB
2K SLoC
Apache Arrow的一个实验性(进行中)静态类型实现。
此crate提供方法来自动生成类型,以支持在Arrow的内存数据结构中读取和写入抽象数据类型的实例。
为什么
arrow
crate提供了当数组类型仅在运行时已知时才有意义的API。其中许多API需要使用trait对象和downcasting。然而,对于类型在编译时已知的应用程序,这些API不便于使用。- 对于嵌套数组类型的nested构建器是复杂的且易出错。
有其他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许可证版本2.0或MIT许可证进行许可。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,将按上述方式双重许可,而不附加任何额外条款或条件。
依赖项
~1.4–2MB
~42K SLoC