поток данных в моем Vega View постепенно - PullRequest
0 голосов
/ 10 апреля 2020

Я использую 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. call run () после вставки, insert('test1', data.data).run() для «коммита», но мне пока не нужно его запускать, пока я не получу все data (именно поэтому я выполняю () в callback complete ()).

  2. Мне нужно было бы проанализировать все сразу в памяти, а затем передать его, используя data('test1', allRows) (что, я думаю, , будет использовать намного больше памяти)

как мне постепенно передавать данные в мое vega представление? Обратите внимание, что я запускаю это внутри веб-работника, насколько я знаю, Vega Loader не поддерживает экземпляр файла браузера (только URL-адреса для среды браузера), я использую papaparse.

1 Ответ

1 голос
/ 11 апреля 2020

Вам нужно запустить runAsync и дождаться его, прежде чем вставлять больше данных в представление, иначе обновления могут быть потеряны. См. https://github.com/vega/vega/issues/2513 для получения дополнительной информации по этому вопросу.

Если вам не нужны промежуточные обновления, когда поступает больше данных, я бы порекомендовал собрать все данные, которые вы хотите вставить, и затем добавить их сразу. Память не будет проблемой, так как вам все равно понадобятся все данные в памяти. Вега все равно сохранит все данные в памяти.

...