簡體   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