逐步将数据流式传输到我的 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}`)
},
})
继续插入新数据的唯一方法是:
插入后调用运行(),insert('test1', data.data).run()
到"commit",但我还不需要它到运行,直到我拥有所有数据(这就是为什么我 运行() 在 complete() 回调中)。
我必须在内存中一次解析所有内容,然后使用 data('test1', allRows)
传递它(我认为这会使用更多内存)
如何将数据逐步流式传输到我的 Vega 视图中?请注意,我 运行 在网络工作者中使用它,据我所知,vega 加载器不支持浏览器的文件实例(仅适用于浏览器环境的 URL),我正在使用 papaparse。
您需要 运行 runAsync
并在将更多数据插入视图之前等待它,否则更新可能会丢失。有关这方面的更多信息,请参阅 https://github.com/vega/vega/issues/2513。
如果您不关心更多数据进来时的中间更新,我建议您收集所有要插入的数据,然后一次添加。内存不会成为问题,因为无论如何您都需要内存中的所有数据。 Vega 无论如何都会将完整数据保存在内存中。
我正在使用 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}`)
},
})
继续插入新数据的唯一方法是:
插入后调用运行(),
insert('test1', data.data).run()
到"commit",但我还不需要它到运行,直到我拥有所有数据(这就是为什么我 运行() 在 complete() 回调中)。我必须在内存中一次解析所有内容,然后使用
data('test1', allRows)
传递它(我认为这会使用更多内存)
如何将数据逐步流式传输到我的 Vega 视图中?请注意,我 运行 在网络工作者中使用它,据我所知,vega 加载器不支持浏览器的文件实例(仅适用于浏览器环境的 URL),我正在使用 papaparse。
您需要 运行 runAsync
并在将更多数据插入视图之前等待它,否则更新可能会丢失。有关这方面的更多信息,请参阅 https://github.com/vega/vega/issues/2513。
如果您不关心更多数据进来时的中间更新,我建议您收集所有要插入的数据,然后一次添加。内存不会成为问题,因为无论如何您都需要内存中的所有数据。 Vega 无论如何都会将完整数据保存在内存中。