apache/arrow-rs

GitHub: apache/arrow-rs

Apache Arrow 与 Parquet 列式格式的官方 Rust 实现,为高性能数据分析提供内存列式布局、文件读写与 IPC 通信能力。

Stars: 3500 | Forks: 1194

# Apache Arrow 和 Apache Parquet 的原生 Rust 实现 欢迎使用 [Rust][rust] 实现的 [Apache Arrow](一种流行的内存列式格式)和 [Apache Parquet](一种流行的列式文件格式)。 ## 仓库结构 本仓库包含以下 crate: | Crate | 描述 | 最新 API 文档 | README | | ------------------ | ---------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------- | | [`arrow`] | 核心功能(内存布局、数组、底层计算) | [docs.rs](https://docs.rs/arrow/latest) | [(README)][arrow-readme] | | [`arrow-flight`] | 支持 Arrow-Flight IPC 协议 | [docs.rs](https://docs.rs/arrow-flight/latest) | [(README)][flight-readme] | | [`parquet`] | 支持 [Apache Parquet] 列式文件格式 | [docs.rs](https://docs.rs/parquet/latest) | [(README)][parquet-readme] | | [`parquet_derive`] | 为任意的简单 struct 派生 RecordWriter/RecordReader 的 crate | [docs.rs](https://docs.rs/parquet-derive/latest) | [(README)][parquet-derive-readme] | 当前开发版本的 API 文档可以在[这里](https://arrow.apache.org/rust)找到。 注意:以前 [`object_store`] crate 也是本仓库的一部分,但它已被移动到 [arrow-rs-object-store 仓库]。 ## 发布版本与计划 Arrow Rust 项目大约每月发布一次,并遵循[语义化版本控制]。 由于维护者和测试资源的限制,[`arrow`] 系列 crate(如 [`arrow`]、[`arrow-flight`] 等)与 [`parquet`] 和 [`parquet_derive`] crate 遵循相同的发布计划和版本号。 此 crate 每月发布一次。我们每季度最多发布一次包含潜在破坏性 API 变更的新主版本,并在期间的月份发布增量次版本。详情请参阅 [ticket #5368]。 为了降低我们的维护负担,我们会定期从 `main` 分支进行发布(包括主版本和次版本)。我们如何处理包含破坏性 API 变更的 PR,在[贡献]指南中有所描述。 计划发布日程 | 大致日期 | 版本 | 备注 | | ---------------- | ---------- | --------------------------------------- | | 2026 年 5 月 | [`58.3.0`] | 次版本,无破坏性 API 变更 | | 2026 年 5 月 | [`57.3.1`] | 修补版本,无破坏性 API 变更 | | 2026 年 5 月 | [`56.2.1`] | 修补版本,无破坏性 API 变更 | | 2026 年 5 月 | [`59.0.0`] | 主版本,包含潜在的破坏性 API 变更 | | 2026 年 6 月 | [`59.1.0`] | 次版本,无破坏性 API 变更 | | 2026 年 7 月 | [`59.2.0`] | 次版本,无破坏性 API 变更 | | 2026 年 8 月 | [`60.0.0`] | 主版本,包含潜在的破坏性 API 变更 | ### Rust 版本兼容性策略 arrow-rs 和 parquet 使用稳定的 Rust 版本进行构建和测试,并将保持一个滚动的 MSRV(最低支持的 Rust 版本)。该版本仅在必要时才会于主版本中更新(例如,项目依赖项提升了其 MSRV,或者某个特定的 Rust 特性对我们有用等)。新选定的 MSRV 将至少有 6 个月的历史。次版本保证具有相同的 MSRV。 注意:如果为当前 MSRV 发布了 Rust 热修复,MSRV 将更新为包含所有适用热修复的特定次版本,此规则优先于其他策略。 ### `panic` 与 `Result` 的使用指南 通常,对于不可达、不可恢复或有害的错误状态,请使用 panic。 然而,对于由无效用户输入引起的情况,我们更倾向于将这种无效性以错误(Error result)的形式优雅地报告出来,而不是触发 panic。通常,无效输入应尽快转化为 `Error`。如果代码路径在验证之后,假定验证已经发生,若未发生则触发 panic,这是*可以接受*的。有关更多细节,请参阅 [ticket #6737]。 ### 废弃指南 次版本可以废弃 API,但不能移除它们。废弃 API 允许下游的 Rust 程序继续编译,但会生成编译器警告。这使得下游 crate 有时间在 API 被移除之前进行迁移。 要废弃一个 API: - 使用 `#[deprecated]` 标记该 API,并指定废弃它的确切 arrow-rs 版本 - 简明扼要地描述首选的替代 API,以帮助用户进行过渡 被废弃的版本是指即将发布的下一个版本(请查阅上面的列表)。要标记 API 为已废弃,请使用 `#[deprecated(since = "...", note = "...")]` 属性。 例如 ``` #[deprecated(since = "51.0.0", note = "Use `date_part` instead")] ``` 通常情况下,被废弃的 API 在被废弃后(通常是在 6 到 9 个月之后)至少还会在代码库中保留两个主版本。例如,在 `51.3.0` 中废弃的 API 可以在 `54.0.0`(或更高版本)中移除。维护者可能会根据实际情况,早于或晚于这些指南移除废弃的 API。 ## 相关项目 在不同的仓库中还有几个相关的 crate | Crate | 描述 | 文档 | | ------------------- | ------------------------------------------------------------ | ---------------------------------- | | [`object_store`] | 对象存储(aws、azure、gcp、本地、内存中)接口 | [(README)][object_store-readme] | | [`datafusion`] | 支持 SQL 的内存查询引擎 | [(README)][datafusion-readme] | | [`ballista`] | 分布式查询执行 | [(README)][ballista-readme] | | [`parquet_opendal`] | 使用 [`opendal`] 进行 [`parquet`] Arrow IO | [(README)][parquet_opendal-readme] | 总的来说,这些 crate 为 Rust 中的分析计算提供了更广泛的功能支持。 例如,您可以编写 SQL 查询或 `DataFrame`(使用 [`datafusion`] crate)来读取 parquet 文件(使用 [`parquet`] crate),使用 Arrow 的列式格式在内存中进行评估(使用 [`arrow`] crate),并发送到另一个进程(使用 [`arrow-flight`] crate)。 一般而言,[`arrow`] crate 提供了使用 Arrow 数组的功能,而 [`datafusion`] 提供了 SQL 中常见的许多操作,包括 `join` 和窗口函数。 您可以在它们各自的 README 中找到关于每个 crate 的更多细节。
标签:Apache Arrow, Parquet, Rust, 内存列式存储, 可视化界面, 开发库, 网络流量审计, 通知系统