读取和写入 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
实例。
配置#
可以使用 IpcReadOptions
和 IpcWriteOptions
类分别配置读取和写入 IPC 格式的各个方面。