Apache Drill具有自己的列式表示形式,例如Apache Arrow。但是Apache Arrow支持更多的编程语言。我期待使用Apache Drill,但我仍然希望Apache Arrow的编程语言支持。
一些消息来源说,Apache Arrow起源于Apache Drill的ValueVectors。
钻取在内部将数据表示为JSON文档–与 MongoDB和Elasticsearch。这些JSON文档被“切碎”成 列,这使Drill可以提高 柱状分析,但保留了查询复杂数据的能力。注意, 此内部表示形式不基于Apache Arrow。 -Source
为什么Apache Drill无法利用Apache Arrow项目? Drill的内部表示形式与Apache Arrow有何不同?Arrow与Drill的ValueVectors相比具有什么优势,反之亦然。
答案 0 :(得分:2)
随着Apache Arrow项目于2016年初开始,Apache Arrow Java库作为Drill的ValueVectors的一个分支而开始。一个重要的区别是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。
我不知道有任何比较内存表示的性能分析,但是与空表示有关的差异不太可能引起显着差异。
答案 1 :(得分:0)
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
也非常欢迎贡献:)