Implementation Status#

The following tables summarize the features available in the various official Arrow libraries. All libraries currently follow version 1.0.0 of the Arrow format. See versioning for details about versioning. Unless otherwise stated, the Python, R, Ruby and C/GLib libraries follow the C++ Arrow library.

Data Types#

Data type (primitive)

C++

Java

Go

JavaScript

C#

Rust

Julia

Null

βœ“

βœ“

βœ“

βœ“

βœ“

Boolean

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Int8/16/32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

UInt8/16/32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Float16

βœ“

βœ“

Float32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal128

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal256

βœ“

βœ“

βœ“

βœ“

Date32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Time32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Timestamp

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Duration

βœ“

βœ“

βœ“

βœ“

βœ“

Interval

βœ“

βœ“

βœ“

βœ“

βœ“

Fixed Size Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Utf8

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large Utf8

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Data type (nested)

C++

Java

Go

JavaScript

C#

Rust

Julia

Fixed Size List

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

List

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large List

βœ“

βœ“

βœ“

βœ“

Struct

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Map

βœ“

βœ“

βœ“

βœ“

βœ“

Dense Union

βœ“

βœ“

βœ“

Sparse Union

βœ“

βœ“

βœ“

Data type (special)

C++

Java

Go

JavaScript

C#

Rust

Julia

Dictionary

βœ“

βœ“ (1)

βœ“

βœ“ (1)

βœ“ (1)

βœ“ (1)

βœ“

Extension

βœ“

βœ“

βœ“

βœ“

Notes:

  • (1) Nested dictionaries not supported

See also

The Arrow Columnar Format specification.

IPC Format#

IPC Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

Arrow stream format

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Arrow file format

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Record batches

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Dictionaries

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Replacement dictionaries

βœ“

βœ“

βœ“

βœ“

Delta dictionaries

βœ“ (1)

βœ“ (1)

βœ“

βœ“

Tensors

βœ“

Sparse tensors

βœ“

Buffer compression

βœ“

βœ“ (3)

βœ“

βœ“

Endianness conversion

βœ“ (2)

Custom schema metadata

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Notes:

  • (1) Delta dictionaries not supported on nested dictionaries

  • (2) Data with non-native endianness can be byte-swapped automatically when reading.

  • (3) LZ4 Codec currently is quite inefficient. ARROW-11901 tracks improving performance.

Flight RPC#

Note

Flight RPC is still experimental.

Flight RPC Transport

C++

Java

Go

JavaScript

C#

Rust

Julia

gRPC transport (grpc:, grpc+tcp:)

βœ“

βœ“

βœ“

βœ“

gRPC domain socket transport (grpc+unix:)

βœ“

βœ“

βœ“

βœ“

gRPC + TLS transport (grpc+tls:)

βœ“

βœ“

βœ“

βœ“

UCX transport (ucx:)

βœ“

Supported features in the gRPC transport:

Flight RPC Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

All RPC methods

βœ“

βœ“

βœ“

Γ— (1)

βœ“

Authentication handlers

βœ“

βœ“

βœ“

βœ“ (2)

βœ“

Call timeouts

βœ“

βœ“

βœ“

βœ“

Call cancellation

βœ“

βœ“

βœ“

βœ“

Concurrent client calls (3)

βœ“

βœ“

βœ“

βœ“

βœ“

Custom middleware

βœ“

βœ“

βœ“

βœ“

RPC error codes

βœ“

βœ“

βœ“

βœ“

βœ“

Supported features in the UCX transport:

Flight RPC Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

All RPC methods

Γ— (4)

Authentication handlers

Call timeouts

Call cancellation

Concurrent client calls

βœ“ (5)

Custom middleware

RPC error codes

βœ“

Notes:

  • (1) No support for handshake or DoExchange.

  • (2) Support using AspNetCore authentication handlers.

  • (3) Whether a single client can support multiple concurrent calls.

  • (4) Only support for DoExchange, DoGet, DoPut, and GetFlightInfo.

  • (5) Each concurrent call is a separate connection to the server (unlike gRPC where concurrent calls are multiplexed over a single connection). This will generally provide better throughput but consumes more resources both on the server and the client.

See also

The Arrow Flight RPC specification.

C Data Interface#

Feature

C++

Python

R

Rust

Go

Java

C/GLib

Ruby

Schema export

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Array export

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Schema import

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Array import

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

See also

The C Data Interface specification.

C Stream Interface (experimental)#

Feature

C++

Python

Go

C/GLib

Ruby

Stream export

βœ“

βœ“

βœ“

βœ“

Stream import

βœ“

βœ“

βœ“

βœ“

βœ“

See also

The C Stream Interface specification.

Third-Party Data Formats#

Format

C++

Java

Go

JavaScript

C#

Rust

Julia

Avro

R

CSV

R/W

R/W

R/W

R/W

ORC

R/W

R (2)

Parquet

R/W

R (3)

R/W

R/W (1)

Notes:

  • R = Read supported

  • W = Write supported

  • (1) Nested read/write not supported.

  • (2) Through JNI bindings. (Provided by org.apache.arrow.orc:arrow-orc)

  • (3) Through JNI bindings to Arrow C++ Datasets. (Provided by org.apache.arrow:arrow-dataset)