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 2021年7月29日

111#apache-arrow

Download history 1157/week @ 2024-04-25 1302/week @ 2024-05-02 1141/week @ 2024-05-09 476/week @ 2024-05-16 46/week @ 2024-05-23 1504/week @ 2024-06-06 1046/week @ 2024-06-13 1179/week @ 2024-06-20 858/week @ 2024-06-27 1370/week @ 2024-07-04 1454/week @ 2024-07-11 1519/week @ 2024-07-18 1000/week @ 2024-07-25 1357/week @ 2024-08-01 987/week @ 2024-08-08

5,075 每月下载量
narrow 中使用

Apache-2.0 OR MIT

105KB
2K SLoC

Narrow logo

crates.io docs.rs

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.0MIT许可证进行许可。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,将按上述方式双重许可,而不附加任何额外条款或条件。

依赖项

~1.4–2MB
~42K SLoC