繁体   English   中英

将 Arrow 数据发送到浏览器的最佳方式是什么?

[英]What is the best way to send Arrow data to the browser?

我在服务器(Python)上有 Apache 箭头数据,需要在浏览器中使用它。 Arrow Flight 似乎没有在 JS 中实现。 将数据发送到浏览器并在那里使用的最佳选择是什么?

我什至不需要在浏览器中使用箭头格式。 这个问题还没有收到任何回复,所以我为我正在寻找的内容添加了一些额外的标准:

  • 自描述:不想维护单独的模式定义
  • 最小开销:例如,一个 float32 数组应该像数据类型指示符、长度值和 4 字节浮点值序列一样紧凑地传输
  • 跨平台:可以轻松从Python发送到浏览器直接接收使用

当然这是一个已解决的问题? 如果是,我一直无法找到解决方案。 请帮忙!

根据 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM