[英]What is the best way to send Arrow data to the browser?
我在服务器(Python)上有 Apache 箭头数据,需要在浏览器中使用它。 Arrow Flight 似乎没有在 JS 中实现。 将数据发送到浏览器并在那里使用的最佳选择是什么?
我什至不需要在浏览器中使用箭头格式。 这个问题还没有收到任何回复,所以我为我正在寻找的内容添加了一些额外的标准:
当然这是一个已解决的问题? 如果是,我一直无法找到解决方案。 请帮忙!
根据 David Li 对您的原始帖子的评论,您可以在服务器端使用PyArrow并在客户端使用Apache Arrow JS 绑定来实现您想要的非流式版本,而无需太多代码。 Arrow IPC 格式可以满足您的要求,因为它随数据一起发送架构,节省空间,零复制,并且是跨平台的。
这是一个玩具示例,显示在服务器上生成记录批次并在客户端接收它:
服务器:
from io import BytesIO
from flask import Flask, send_file
from flask_cors import CORS
import pyarrow as pa
app = Flask(__name__)
CORS(app)
@app.get("/data")
def data():
data = [
pa.array([1, 2, 3, 4]),
pa.array(['foo', 'bar', 'baz', None]),
pa.array([True, None, False, True])
]
batch = pa.record_batch(data, names=['f0', 'f1', 'f2'])
sink = pa.BufferOutputStream()
with pa.ipc.new_stream(sink, batch.schema) as writer:
writer.write_batch(batch)
return send_file(BytesIO(sink.getvalue().to_pybytes()), "data.arrow")
客户
const table = await tableFromIPC(fetch(URL));
// Do what you like with your data
编辑:我在https://github.com/amoeba/arrow-python-js-ipc-example添加了一个可运行的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.