我有非常大的csv文件(370GB)。我有足够的RAM(64 GB)在Windows 10上运行.
我认为以下是处理我的系统上的数据的最佳方法,但我不确定如何实现它。
1.我想把它分成4个不同的csv文件(因为我有四核系统)。
1.然后在不同的内核上处理每个文件(使用集群)。
1.处理后的结果应合并为一个。
目前我使用以下代码来获取和处理数据:
var fs = require('fs'),
util = require('util'),
stream = require('stream'),
es = require('event-stream'),
path = require("path");
var dir = path.join(__dirname,'./ttwe.csv');
var lineNr = 0;
var s = fs.createReadStream('AIR_Pre_Processed_Data_For_EDA_16th_June_2016.csv')
.pipe(es.split())
.pipe(es.mapSync(function(line){
// find /v /c "" AIR_Pre_Processed_Data_For_EDA_16th_June_2016.csv (command to get totel no of line which gives 37931757)
s.pause();
lineNr += 1;
let ttp=line.split("^")[1].replace(/_," ");
if(ttp !='NA' && ttp !='undefined' && ttp !=''){
fs.appendFile(dir,ttp+",\n");
}
process.stdout.write('\u001B[2J\u001B[0;0f');
console.log(lineNr," of 37931757 Lines: ",parseInt((lineNr/37931757)*100),"%");
s.resume();
})
.on('error', function(e){
console.log('Error while reading file.',e);
})
.on('end', function(){
console.log('Read entire file.')
})
);
1条答案
按热度按时间ddarikpa1#
有一个软件包可以将这个巨大的文件拆分为较小的文件:
csv-split-stream
. csv-split-stream。您可以在每个文件上定义最大块,然后分别处理它们。
got it here