NodeJS在线程/工作者中读取+写入CSV

时间:2015-10-22 17:58:23

标签: node.js multithreading csv asynchronous

我目前有一个nodejs脚本,它从CSV文件中读取数据,然后根据每行中的数据写入许多不同的CSV。

有300个CSV(大约40Gb)需要处理,因此我在脚本中添加了异步,以便在所有内核中同时读取和写入数据。

async.mapLimit(filePaths, 4, streamZip, function (err, results) {
    console.log('finished');
});

但事实证明,这不是异步所做的。这段代码实际上比单独处理每个文件需要更多的时间,因为它只使用一个核心。

似乎有许多不同的方法可以使用更多核心clusterchild processweb workersworker-farm

还有其他问题,例如one

但他们似乎都想使用HTTP或Express并作为服务器运行,或者他们调用外部程序,如'ls'。而不是像在Python中那样运行多处理池。

任何人都可以提供一个示例或帮助,说明如何使用并行读取多个CSV文件的线程或进程,并且都写入相同的fs.createWriteStreams吗?

由于

我的更多代码在这里:

function streamZip(filePath, callback) {
var stream = fs.createReadStream(filePath)
    .pipe(unzip.Parse())
    .on('entry', function (entry) {
        var fileName = entry.path;
        entry.pipe(csvStream)
    })

var csvStream = csv()
    .on("data", function(data){
        var identifier = data[0];
        if (identifier === '10') {
            10CSV.write(data)
        } else if (identifier === '11') {
            11CSV.write(data)
        } else if (identifier === '15') {
            15CSV.write(data)
        }
    })
    .on("end", function(){
        callback(null, filePath + 'Processed');
    });
}

0 个答案:

没有答案