我目前有一个nodejs脚本,它从CSV文件中读取数据,然后根据每行中的数据写入许多不同的CSV。
有300个CSV(大约40Gb)需要处理,因此我在脚本中添加了异步,以便在所有内核中同时读取和写入数据。
async.mapLimit(filePaths, 4, streamZip, function (err, results) {
console.log('finished');
});
但事实证明,这不是异步所做的。这段代码实际上比单独处理每个文件需要更多的时间,因为它只使用一个核心。
似乎有许多不同的方法可以使用更多核心cluster,child process,web workers和worker-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');
});
}