2

Apache Drill 有自己的柱状表示,如 Apache Arrow。但是 Apache Arrow 支持更多的编程语言。我期待使用 Apache Drill,但我仍然想要 Apache Arrow 的编程语言支持。

一些消息来源说,Apache Arrow 源于 Apache Drill 的 ValueVectors。

Drill 在内部将数据表示为 JSON 文档——类似于 MongoDB 和 Elasticsearch。这些 JSON 文档被“分解”成列,这允许 Drill 提供列分析的性能增强,但保留查询复杂数据的能力。请注意,此内部表示不基于 Apache Arrow。-来源

为什么 Apache Drill 不能使用 Apache Arrow 项目?Drill 的内部表示与 Apache Arrow 有何不同,Arrow 与 Drill 的 ValueVectors 相比有什么优势,反之亦然。

4

2 回答 2

3

Apache Arrow Java 库最初是 Drill 的 ValueVectors 的一个分支,Apache Arrow 项目于 2016 年初开始。内存表示几乎相同;一个显着的区别是 Arrow 使用 1 位来表示向量槽是否为空,而 Drill 使用 1 字节。出于内存效率和使用 popcount 内在操作来检查一批值是否包含任何空值的原因,我们决定更改此设置。

已经讨论过是否在 Apache Drill 中完全使用 Arrow 的表示,但是没有时间表来实现。相关问题是https://issues.apache.org/jira/browse/DRILL-4455

Apache Arrow 已被开发为具有多种编程语言的公共 API 的开放标准。我们现在通过本机实现或绑定对 11 种编程语言提供一定程度的支持。这包括 C、C++、C#、Go、Java、JavaScript、MATLAB、Python、R、Ruby 和 Rust。

我不知道任何比较内存表示的性能分析,但与空表示相关的差异不太可能导致显着差异。

于 2018-11-30T14:18:34.603 回答
1

Drill 的社区正在考虑迁移到 Apache Arrow。请查看以下票证: https ://issues.apache.org/jira/browse/ARROW-3164
https://issues.apache.org/jira/browse/DRILL-4455

但它现在被搁置了,因为这两个项目都有很多变化和改进。所以在术语、元数据表示法、数据类型、数据布局方面存在一些差异。
您可以在钻开发邮件列表中回复此邮件线程以进一步讨论: https ://lists.apache.org/thread.html/8d895fb40702f3120532f15594ea935a818ac0eb5acdb4fd1248d89f @%3Cdev.drill.apache.org%3E
也非常欢迎贡献:)

于 2018-12-25T21:46:26.313 回答