处理(过滤)BIG csv文件的最佳/更好方法?

时间:2016-02-16 08:38:51

标签: node.js csv bigdata

我在一个~3-4GB的未压缩csv文件中有很多gb的数据。我创建了一个流函数,它扫描每个csv文件中某个列中的值,如果是,则将其保存到单个输出文件(由每个输入函数共享)。

我看到的是将其设置为流式传输26个文件(一年52周/一季2个),一次大约需要8-9000秒(文件大约346秒)。当我运行单个文件时,我得到< 200秒我在哪里创造70%的开销?

我希望代码无关紧要,但是为了冗长:我正在使用一个名为“byline”的库来传输文件。很确定我的过滤是次优的(特别是后来支持多个过滤器),但我目前只运行1个过滤器,因此应该对性能保持中立。

var fs = require('fs');
var byline = require('byline');

function readSkuData(afilename,col,value) {

    var stream = fs.createReadStream(afilename);

    stream = byline.createStream(stream);
    filters.push([col,value]);


    stream.on('data',function(line) {
        loaded = loaded + line.length;
        lineinfo = line.toString().split(",");

        if (!(lineFiltered(lineinfo,filters))) {
            filteredsize = filteredsize + 1;
            fs.appendFile('filteredData.csv',"\n" + line, function (err) { if (err) throw err;});
        }

    });

    stream.on('end',finishProcess);
}

function lineFiltered(line,filters) {
    for (i=0;i < filters.length;i++) {
        if (line[filters[i][0]] != filters[i][1]) {
            return true;
        }
    }
    return false;
}

0 个答案:

没有答案