23个主要重大版本发布

52.2.0 2024年7月28日
52.0.0 2024年6月6日
51.0.0 2024年3月18日
50.0.0 2024年1月12日
29.0.0 2022年12月12日

90算法 中排名

Download history 144848/week @ 2024-05-03 164797/week @ 2024-05-10 156371/week @ 2024-05-17 152739/week @ 2024-05-24 228115/week @ 2024-05-31 262230/week @ 2024-06-07 222999/week @ 2024-06-14 275173/week @ 2024-06-21 270306/week @ 2024-06-28 258230/week @ 2024-07-05 255143/week @ 2024-07-12 255909/week @ 2024-07-19 269740/week @ 2024-07-26 269440/week @ 2024-08-02 269045/week @ 2024-08-09 294593/week @ 2024-08-16

每月下载量1,157,558
327 个crate(19个直接) 中使用

Apache-2.0

2.5MB
49K SLoC

Apache Arrow和Apache Parquet的本地Rust实现

Coverage Status

欢迎使用RustApache Arrow实现,这是流行的内存列式格式。

此仓库包含以下主要组件

Crate 描述 最新API文档 README
arrow 核心功能(内存布局、数组、低级计算) docs.rs (README)
arrow-flight 支持Arrow-Flight IPC协议 docs.rs (README)
object-store 支持对象存储交互(aws、azure、gcp、本地、内存) docs.rs (README)
parquet 支持Parquet列式文件格式 docs.rs (README)
parquet_derive 用于派生任意简单结构的RecordWriter/RecordReader的crate docs.rs (README)

在此仓库中,当前的开发版本API文档可在此找到。

版本发布和计划

arrowparquetcrate

Arrow Rust项目大约每月发布一次,遵循语义版本化

由于可用的维护者和测试带宽,arrow 包(包括 arrowarrow-flight 等)将与 parquetparquet-derive 包以相同的版本和相同的发布计划发布。

此包每月发布一次。我们最多每季度发布一次新的大版本(可能包含破坏性API更改),并在间隔月份发布增量小版本。有关更多详细信息,请参阅此票据

为了减少我们的维护负担,我们定期从 master 分支进行(主要和次要)发布。我们如何在贡献指南中描述处理破坏性API更改的PR。

计划发布时间表

大约日期 版本 备注
2024年9月 53.0.0 主要版本,可能包含破坏性API更改
2024年10月 53.1.0 小版本,无破坏性API更改
2024年11月 53.2.0 小版本,无破坏性API更改
2024年12月 54.0.0 主要版本,可能包含破坏性API更改

object_store

object_store 包独立于 arrowparquet 包发布,并遵循 语义化版本控制。我们旨在大约每两个月发布新版本。

不同仓库中有几个相关的包

Crate 描述 文档
datafusion 支持SQL的内存查询引擎 (README)
ballista 分布式查询执行 (README)
object_store_opendal 使用 opendal 作为 object_store 后端 (README)

总而言之,这些包支持在Rust中进行更广泛的分析计算功能。

例如,您可以使用(使用 datafusion 包)编写SQL查询或一个 DataFrame,使用(使用 parquet 包)读取Parquet文件,使用(使用 arrow 包)的列式格式在内存中评估它,然后使用(使用 arrow-flight 包)发送到另一个进程。

一般来说,arrow 包提供使用Arrow数组的功能,而 datafusion 包提供大多数在SQL中常见的操作,包括 join 和窗口函数。

您可以在各自的 README 中找到有关每个包的更多详细信息。

Arrow Rust 社区

dev@arrow.apache.org 邮件列表是 Arrow 社区的核心沟通渠道。有关注册说明和存档链接,请参阅Arrow 社区页面。所有重大公告和通讯都在那里进行。

Rust Arrow 社区还使用官方的 ASF Slack 进行非正式讨论和协调。这是一个结识其他贡献者并获得贡献指导的绝佳场所。加入我们的 #arrow-rust 频道,并随时通过

  1. dev@arrow.apache.org 邮件列表
  2. GitHub Discussions
  3. Discord 频道

Rust 实现使用 GitHub issues 作为新功能和错误修复的记录系统,这在发布过程中起着关键作用。

对于设计讨论,我们通常在 Google 文档上进行协作,并提交一个 GitHub issue,链接到该文档。

有关更多信息,请参阅 贡献指南


lib.rs:

Arrow 排序内核

排序 RecordBatch

#
let a: ArrayRef = Arc::new(Int32Array::from(vec![1, 2, 3, 4]));
let b: ArrayRef = Arc::new(StringArray::from(vec!["b", "a", "e", "d"]));
let batch = RecordBatch::try_from_iter(vec![("a", a), ("b", b)]).unwrap();

// Sort by column 1
let indices = sort_to_indices(batch.column(1), None, None).unwrap();

// Apply indices to batch columns
let columns = batch.columns().iter().map(|c| take(&*c, &indices, None).unwrap()).collect();
let sorted = RecordBatch::try_new(batch.schema(), columns).unwrap();

let col1 = sorted.column(0).as_primitive::<Int32Type>();
assert_eq!(col1.values(), &[2, 1, 4, 3]);

依赖项

~3.5–9MB
~78K SLoC