High-Level Overview¶
The Arrow C++ library is comprised of different parts, each of which serves a specific purpose.
The physical layer¶
Memory management abstractions provide a uniform API over memory that may be allocated through various means, such as heap allocation, the memory mapping of a file or a static memory area. In particular, the buffer abstraction represents a contiguous area of physical data.
The one-dimensional layer¶
Data types govern the logical interpretation of physical data. Many operations in Arrow are parametered, at compile-time or at runtime, by a data type.
Arrays assemble one or several buffers with a data type, allowing to view them as a logical contiguous sequence of values (possibly nested).
Chunked arrays are a generalization of arrays, comprising several same-type arrays into a longer logical sequence of values.
The two-dimensional layer¶
Schemas describe a logical collection of several pieces of data, each with a distinct name and type, and optional metadata.
Tables are collections of chunked array in accordance to a schema. They are the most capable dataset-providing abstraction in Arrow.
Record batches are collections of contiguous arrays, described by a schema. They allow incremental construction or serialization of tables.
The compute layer¶
Datums are flexible dataset references, able to hold for example an array or table reference.
Kernels are specialized computation functions running in a loop over a given set of datums representing input and output parameters to the functions.
The IO layer¶
Streams allow untyped sequential or seekable access over external data of various kinds (for example compressed or memory-mapped).
The Inter-Process Communication (IPC) layer¶
A messaging format allows interchange of Arrow data between processes, using as few copies as possible.
The file formats layer¶
Reading and writing Arrow data from/to various file formats is possible, for example Parquet, CSV, Orc or the Arrow-specific Feather format.
The devices layer¶
Basic CUDA integration is provided, allowing to describe Arrow data backed by GPU-allocated memory.
The filesystem layer¶
A filesystem abstraction allows reading and writing data from different storage backends, such as the local filesystem or a S3 bucket.