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 在 算法 中排名
每月下载量1,157,558
在 327 个crate(19个直接) 中使用
2.5MB
49K SLoC
Apache Arrow和Apache Parquet的本地Rust实现
欢迎使用Rust的Apache 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文档可在此处找到。
版本发布和计划
arrow
和parquet
crate
Arrow Rust项目大约每月发布一次,遵循语义版本化。
由于可用的维护者和测试带宽,arrow
包(包括 arrow
、arrow-flight
等)将与 parquet
和 parquet-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
包独立于 arrow
和 parquet
包发布,并遵循 语义化版本控制。我们旨在大约每两个月发布新版本。
相关项目
不同仓库中有几个相关的包
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
频道,并随时通过
dev@arrow.apache.org
邮件列表- GitHub Discussions
- 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