Apache Arrow 概述
Apache Arrow 是一个多语言工具箱,用于构建处理和传输大型数据集的高性能应用程序。它旨在提高分析算法的性能以及在不同系统或编程语言之间移动数据的效率。
Apache Arrow 的一个关键组成部分是其 **内存中的列式格式**,这是一个标准化的、与语言无关的规范,用于在内存中表示结构化的、表状的数据集。这种数据格式拥有丰富的数据类型系统(包括嵌套和用户定义的数据类型),旨在支持分析数据库系统、数据框库等的需求。
列式存储的速度优势
Apache Arrow 格式使计算例程和执行引擎在扫描和迭代大型数据块时能够最大限度地提高效率。特别是,连续的列式布局使得能够利用现代处理器中包含的最新 SIMD(单指令多数据)操作进行向量化处理。
标准化带来的节省
如果没有标准化的列式数据格式,每个数据库和语言都必须实现自己的内部数据格式。这会产生大量浪费。系统之间的数据移动涉及昂贵的序列化和反序列化。此外,通用算法通常必须针对每种数据格式进行重写。
Arrow 的内存中列式数据格式是解决这些问题的现成方案。使用或支持 Arrow 的系统之间可以以极低的甚至零成本传输数据。此外,它们不需要为其他每个系统实现自定义连接器。在这些节省的基础上,标准化的内存格式有助于算法库的重用,即使是跨语言的重用。
Arrow 库
Arrow 项目包含允许您使用多种语言中的 Arrow 列式格式处理数据的库。 C++、.NET、Go、Java、JavaScript、Julia、Rust 和 Swift 库包含 Arrow 格式的不同实现。这些库会相互进行 集成测试,以确保它们忠实于格式。此外,用于 C (GLib)、MATLAB、Python、R 和 Ruby 的 Arrow 库是基于 C++ 库构建的。
这些官方库使第三方项目能够在不自行实现 Arrow 列式格式的情况下使用 Arrow 数据。它们还包含许多软件组件,可以协助处理与从远程存储系统导入和导出数据以及通过网络接口传输 Arrow 格式数据相关的系统问题,以及其他 用例。