如何跨多进程(含不同语言)使用Apache Arrow IPC?
跨进程只读访问PyArrow Table的实现疑问
我需要在一个进程中创建数组/表,供另一个进程以只读方式访问,目前已创建了如下PyArrow Table:
import pyarrow as pa a1 = pa.array(list(range(3))) a2 = pa.array(["foo", "bar", "baz"]) # a1输出: # <pyarrow.lib.Int64Array object at 0x7fd7c4510100> # [ # 0, # 1, # 2 # ] # a2输出: # <pyarrow.lib.StringArray object at 0x7fd7c5d6fa00> # [ # "foo", # "bar", # "baz" # ] tbl = pa.Table.from_arrays([a1, a2], names=["num", "name"]) # tbl输出: # pyarrow.Table # num: int64 # name: string # ---- # num: [[0,1,2]] # name: [["foo","bar","baz"]]
我尝试用multiprocessing.shared_memory.SharedMemory实现跨进程访问,但遇到了错误:
from multiprocessing import shared_memory import pyarrow as pa shm = shared_memory.SharedMemory(name='pa_test', create=True, size=tbl.nbytes) with pa.ipc.new_stream(shm.buf, tbl.schema) as out: for batch in tbl.to_batches(): out.write(batch) # 报错:TypeError: Unable to read from object of type: <class 'memoryview'>
我有以下几个疑问:
- 是否需要对
shm.buf进行包装才能让PyArrow的IPC流正常使用? - 即便解决上述问题,操作仍显繁琐,如何实现更健壮的跨进程访问?是否需要使用zmq这类工具?
- 我不太理解零拷贝的实现机制:写入记录批次时不也是序列化吗?我遗漏了什么关键点?
- 实际场景中后续还需要与Julia交互,不过这是后续问题。
注:我已查阅Apache Arrow官方文档,但这部分内容并未得到明确说明。
内容的提问来源于stack exchange,提问作者suvayu
相关产品推荐
相关产品推荐

