如何序列化apache箭头c++表,通过套接字传递,并在python端反序列化它



我是apache arrow的新手,我的c++项目使用apache::table来很好地存储数据。现在,我需要用套接字转换c++表到其他python客户端。为什么要这样做,因为python客户端需要将数据转换为数据框架,并且我注意到python中的箭头表可以使用'to_pandas()'来做到这一点。我试图查找箭头代码,但我什么也没找到。

可以通过基本套接字发送箭头表(示例如下),但您可能更适合使用Flight。Flight使用grpc来回发送箭头数据,它将消除使用套接字的一些乏味。这是一个很好的例子。

完整的套接字示例可以在此要点中找到。

我将把相关的位放在这里:

发送
void SendTable(int socket_fd) {
auto output_res = SocketOutputStream::Open(socket_fd);
if (!CheckErr(output_res.status(), "arrow::io::FileOutputStream")) {
return;
}
auto output = *output_res;
arrow::MemoryPool *pool = arrow::default_memory_pool();
auto table = MakeTable();
if (table == nullptr) {
return;
}
auto writer_res = arrow::ipc::MakeStreamWriter(output, table->schema());
if (!CheckErr(writer_res.status(), "arrow::ipc::MakeStreamWriter")) {
return;
}
auto writer = *writer_res;
if (!CheckErr(writer->WriteTable(*table), "RecordBatchWriter::WriteTable")) {
return;
}
CheckErr(writer->Close(), "RecordBatchWriter::Close");
}
接受

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind((listen, port))
sock.listen()
print(f"Listening on {listen} on port {port}")
conn, _ = sock.accept()
with conn:
conn_file = conn.makefile(mode="b")
reader = pyarrow.ipc.RecordBatchStreamReader(conn_file)
table = reader.read_all()
print(table)
print(table.to_pandas())

相关内容

最新更新