高级概述#
Arrow C++ 库由不同的部分组成,每个部分都有特定的用途。
物理层#
**内存管理**抽象提供了一个统一的 API,用于通过各种方式分配的内存,例如堆分配、文件的内存映射或静态内存区域。 特别是,**缓冲区**抽象表示连续的物理数据区域。
一维层#
**数据类型**控制*物理*数据的*逻辑*解释。 Arrow 中的许多操作在编译时或运行时都由数据类型参数化。
**数组**将一个或多个缓冲区与数据类型组合在一起,允许将它们视为值的逻辑连续序列(可能是嵌套的)。
**分块数组**是数组的泛化,将多个相同类型的数组组成更长的值的逻辑序列。
二维层#
**模式**描述了多个数据片段的逻辑集合,每个片段都有不同的名称、类型和可选的元数据。
**表**是根据模式收集的分块数组。 它们是 Arrow 中功能最强大的数据集提供抽象。
**记录批次**是由模式描述的连续数组的集合。 它们允许增量构建或序列化表。
计算层#
**数据项**是灵活的数据集引用,能够例如保存数组或表引用。
**内核**是专门的计算函数,在给定的一组代表函数输入和输出参数的数据项上循环运行。
**Acero**(发音为 [aˈsɜɹo] / ah-SERR-oh)是一个流式执行引擎,允许将计算表示为可以转换数据流的运算符图。
IO 层#
**流**允许对各种类型的外部数据(例如压缩或内存映射)进行无类型顺序或可查找访问。
进程间通信 (IPC) 层#
**消息格式**允许在进程之间交换 Arrow 数据,并尽可能少地进行复制。
文件格式层#
可以从/向各种文件格式读取和写入 Arrow 数据,例如 **Parquet**、**CSV**、**Orc** 或 Arrow 特定的 **Feather** 格式。
设备层#
提供了基本的 **CUDA** 集成,允许描述由 GPU 分配的内存支持的 Arrow 数据。
文件系统层#
文件系统抽象允许从不同的存储后端读取和写入数据,例如本地文件系统或 S3 存储桶。