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

#72 in 数据结构

Download history 1169/week @ 2024-05-02 1131/week @ 2024-05-09 444/week @ 2024-05-16 40/week @ 2024-05-23 1625/week @ 2024-06-06 1245/week @ 2024-06-13 1638/week @ 2024-06-20 1042/week @ 2024-06-27 1057/week @ 2024-07-04 1217/week @ 2024-07-11 1434/week @ 2024-07-18 989/week @ 2024-07-25 1345/week @ 2024-08-01 1197/week @ 2024-08-08 1190/week @ 2024-08-15

5,029 个月下载量

Apache-2.0 OR MIT

400KB
10K SLoC

Narrow logo

crates.io docs.rs

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.0MIT license

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在本作品中的贡献都应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~0–7MB
~32K SLoC