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.