读取和写入 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 实例。

配置#

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