You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pyarrow的RecordBatch实现跨进程及跨主机通信

问题1:跨进程/跨主机传递RecordBatch的实现方案

你遇到的本地文件读取报错是因为写入完成后没有关闭writer:Arrow文件的尾部元数据仅在writer执行close()操作时才会写入文件,未关闭的文件结构不完整,因此会抛出ArrowInvalid: Not an Arrow file错误。正确的本地文件读写示例如下:

# 写入端
with pa.ipc.new_file('tmp.record_batch', batch.schema) as writer:
    writer.write_batch(batch)
# with块退出时自动调用close,写入完整元数据

# 读取端
with pa.ipc.open_file('tmp.record_batch') as reader:
    batch = reader.get_batch(0)

跨进程/跨主机传递的通用逻辑非常简单:sink.getvalue()拿到的本质是标准二进制字节序列,你可以通过任意通信通道传递这串字节,接收端拿到后直接用对应api解析即可,常见场景适配方式:

  • 同一主机跨进程:可使用本地文件共享、UNIX域套接字、内存映射文件、命名管道实现字节传输,无需落盘性能更高
  • 跨主机:可通过TCP、HTTP等常规网络协议传输序列化后的字节流,也可以直接使用Arrow Flight组件封装好的跨节点传输能力,无需自行处理字节收发逻辑

问题2:SWMR模式支持情况

pyarrow RecordBatch的读写原生支持SWMR(单写多读非阻塞)模式,仅需满足以下使用要求:

  • 仅Arrow文件格式支持SWMR,流格式不支持该特性
  • 写入端创建writer时需要开启对应配置:添加参数options=pa.ipc.IpcWriteOptions(use_memory_map=True),写入过程中定期调用writer.write_metadata()刷入当前写入进度的元数据,无需等待所有数据写入完成后再关闭
  • 读取端使用只读模式打开文件即可读取已完成写入的RecordBatch,读写操作不会互相阻塞
  • 同一时间仅允许一个写入进程操作,多写入并发暂不支持

内容的提问来源于stack exchange,提问作者Ying Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:45:01