读取和写入 Arrow IPC 格式#
Arrow C++ 提供 Arrow IPC 格式的读取器和写入器,它们封装了低级输入/输出,并通过IO 接口进行处理。对于读取,还有一个事件驱动的 API,可以异步地将任意数据送入 IPC 解码层。
读取 IPC 流和文件#
同步读取#
在大多数情况下,最方便的是使用 RecordBatchStreamReader 或 RecordBatchFileReader 类,具体取决于您要读取的 IPC 格式变体。前者需要一个 InputStream 源,而后者需要一个 RandomAccessFile。
如果源允许,读取 Arrow IPC 数据本质上是零拷贝的。例如,BufferReader 或 MemoryMappedFile 通常可以实现零拷贝。例外情况是数据必须即时转换时,例如在 IPC 流或文件上启用了缓冲区压缩时。
事件驱动读取#
当需要非阻塞地处理 IPC 格式(例如将 Arrow 与事件循环集成),或者数据来自不寻常的源时,请使用事件驱动的 StreamDecoder。您需要定义一个 Listener 的子类,并实现所需事件的虚拟方法(例如,实现 Listener::OnRecordBatchDecoded() 以接收每个传入的 RecordBatch 的通知)。
写入 IPC 流和文件#
使用工厂函数 MakeStreamWriter() 或 MakeFileWriter() 之一,获取给定 IPC 格式变体的 RecordBatchWriter 实例。
配置#
IPC 格式的读取和写入的各个方面可以使用 IpcReadOptions 和 IpcWriteOptions 类进行配置。