逐步将数据流式传输到我的 Vega 视图中

stream data into my vega view progressively

我正在使用 Papaparse 解析 CSV,并且在每个数据上,我 运行 插入到视图中,如下所示:

Papa.parse(createReadStream('geo.csv'), {
header: true,
chunk(data) {
    console.log('chunk: ', data.data.length)
    // data.data.length > 0 && tally.push(...data.data)
    view.insert('test1', data.data)
},
complete() {

    view.data('test1').length // this will return 0
    console.log('memory:', process.memoryUsage().heapUsed / 1024 / 1024, ` == time: ${Date.now() - start}`)
},

})

继续插入新数据的唯一方法是:

  1. 插入后调用运行(),insert('test1', data.data).run()到"commit",但我还不需要它到运行,直到我拥有所有数据(这就是为什么我 运行() 在 complete() 回调中)。

  2. 我必须在内存中一次解析所有内容,然后使用 data('test1', allRows) 传递它(我认为这会使用更多内存)

如何将数据逐步流式传输到我的 Vega 视图中?请注意,我 运行 在网络工作者中使用它,据我所知,vega 加载器不支持浏览器的文件实例(仅适用于浏览器环境的 URL),我正在使用 papaparse。

您需要 运行 runAsync 并在将更多数据插入视图之前等待它,否则更新可能会丢失。有关这方面的更多信息,请参阅 https://github.com/vega/vega/issues/2513

如果您不关心更多数据进来时的中间更新,我建议您收集所有要插入的数据,然后一次添加。内存不会成为问题,因为无论如何您都需要内存中的所有数据。 Vega 无论如何都会将完整数据保存在内存中。