尝试用流汇总J​​SON数据:得到EMFILE错误和"该过程试图写入一个不存在的管道"

时间:2016-05-30 16:48:09

标签: javascript json node.js

我正在尝试使用大型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)
      }    
}
));

0 个答案:

没有答案