Как загрузить и проанализировать CSV-файл размером 300 МБ с 6M + строками, используя Nodejs? - PullRequest
0 голосов
/ 02 мая 2020

Я загрузил большой CSV-файл со значениями питательных веществ для пищевого продукта для API, который я хотел создать, размер файла + 300 МБ и более 6 миллионов строк. Структура CSV-файла следующая:

"id","fdc_id","nutrient_id","amount","data_points","derivation_id","min","max","median","footnote","min_year_acquired"
"3639112","344604","1089","0","","75","","","","",""
"3639113","344604","1110","0","","75","","","","",""
... 6M more of these

Это то, что я пробовал, безуспешно. Если я ограничу длину данных разумным числом и остановлюсь раньше, это сработает, но, конечно, мне нужно разобрать весь файл в JSON. Я также попытался использовать пакет csv-parser NPM и передать поток чтения, но также безуспешно. Как мне go об этом?

const fs = require('fs');
const readline = require('readline');

(async () => {
    const readStream = fs.createReadStream('food_nutrient.csv');
    const rl = readline.createInterface({
        input: readStream,
        crlfDelay: Infinity
    });

    let data = [], titles;

    for await (const line of rl) {
        const row = line.split(',').map(s=>s.replace(/\W/g, '').trim());
        if (!titles) {
            titles = row;
            continue;
        }
        data.push(Object.fromEntries(titles.map((t, i) => [t, +row[i]||0])));
    }

    // never getting here in this lifetime
    debugger;
    console.log('Done!');

})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...