Apache Arrow定义:
Apache Arrow定义了一个各语言通用(language-agnostic)的列式内存格式(columnar memory format),支持扁平(flat)和多层级的(hierarchical)数据。
能力:1、为分析应用程序提供了零复制数据传输;2、支持内存中、列式格式和数据处理;3、跨平台、跨语言可互操作的数据交换方式。
核心点:
1、列式存储:减少IO、压缩效果好、高效计算(CPU缓存加速、指令加速)。
2、与语言无关的内存交换结构:运行时的数据存储交互。
除了Arrow本身的数据结构外,Arrow项目还围绕这种数据协议搭建了一整套完善的生态,包括:
各大主流语言的原生支持
Compute:++原生的向量化计算引擎,支持数值计算、数组计算、聚合计算等各种常见的计算函数
Gandiva:基于LLVM JIT的表达式计算库,在数值计算上可以得到明显加速效果
Datafusion:Rust原生的SQL查询引擎
Ballista:分布式SQL查询组件
Flight:用于传输Arrow数据的RPC框架
ADBC:Arrow的标准数据库访问协议
第三方文件格式支持:如JSON、CSV、Apache Parquet、Apache ORC等等协议与Arrow之间的转换
大数据表支持:除了Array外,Arrow还提供了RecordBatch二维数据表、Dataset数据集的类型
完整的平台支持:包括Linux(Ubuntu、CentOS、Arch等),MacOS,Windows等等操作系统和amd64、arm64等架构
完整的语言支持:包括C++、Python、Java、Go等主流语言的支持。
总结:
1、零拷贝读取,以便在没有序列化开销的情况下进行闪电式的数据访问。
2、可以认为Apache Arrow是一种OLAP计算执行库,在它的框架下,你只需要将其他格式的数据转化为Apache Arrow放置在内存中,就可以利用它提供的配套库实现各种计算和查询需求,它能为你提供极高的执行性能和对硬件能力的充分利用。譬如说,在执行查询时,将保存为Parquet等格式的数据抽取到内存中,转化为Apache Arrow的格式,之后调用Arrow提供的各种工具函数完成计算。由于它提供了各种语言的绑定,你可以使用包括Java、Python、Rust等在内的多种语言调用它。