读取和写入 Arrow IPC 格式#

Arrow C++ 为 Arrow IPC 格式提供了读取器和写入器,它们包装了低级输入/输出,通过 IO 接口 处理。 对于读取,还有一个事件驱动的 API,可以异步地将任意数据馈送到 IPC 解码层。

读取 IPC 流和文件#

同步读取#

在大多数情况下,最方便的是使用 RecordBatchStreamReaderRecordBatchFileReader 类,具体取决于您要读取的 IPC 格式的变体。 前者需要一个 InputStream 源,而后者需要一个 RandomAccessFile

如果源允许,读取 Arrow IPC 数据本质上是零拷贝的。 例如,BufferReaderMemoryMappedFile 通常可以是零拷贝的。 但也有例外,例如当必须动态转换数据时,例如在 IPC 流或文件上启用了缓冲区压缩时。

事件驱动读取#

当需要非阻塞地处理 IPC 格式时(例如将 Arrow 与事件循环集成),或者数据来自不寻常的源时,请使用事件驱动的 StreamDecoder。 您需要定义 Listener 的子类并实现所需事件的虚方法(例如,实现 Listener::OnRecordBatchDecoded() 以便在每个传入的 RecordBatch 时得到通知)。

写入 IPC 流和文件#

使用工厂函数之一,MakeStreamWriter()MakeFileWriter(),以获取给定 IPC 格式变体的 RecordBatchWriter 实例。

配置#

可以使用 IpcReadOptionsIpcWriteOptions 类分别配置读取和写入 IPC 格式的各个方面。