我正在尝试使用大型JSON文件(~1 GB)。它由日期和城市组成。最终,我的目标是获得数据摘要:每年,每个城市有多少条目?
在命令窗口中,我运行type myjson.json |node --max-old-space-size=5120 script.js
,其中script.js
为:
var JSONStream = require('JSONStream')
, es = require('event-stream'), fs = require('fs');
process.stdin
.pipe(JSONStream.parse('*'))
.pipe(es.mapSync(function (data) {
if (data.date == '1972'){
fs.createWriteStream('file_1972.txt');
}
}
));
我收到此错误:
Error: EMFILE: too many open files, open 'file_1972.txt' at Error (native)
The process tried to write to a nonexistant pipe.
这是什么错误以及如何解决?我的方法/代码有什么问题吗?
解决方案:
var JSONStream = require('JSONStream')
, es = require('event-stream'), fs = require('fs');
var stream1 = fs.createWriteStream('file_1972.txt');
process.stdin
.pipe(JSONStream.parse('*'))
.pipe(es.mapSync(function (data) {
if (data.date == '1972'){
stream1.write(data.date + data.city)
}
}
));