使用ReadStream和Lazy将大文件读入Node.js时意外结束

时间:2013-03-30 18:28:07

标签: javascript node.js mongodb

背景

我正在协助一个项目分析2013年NCAA男子篮球锦标赛中有关游戏的Twitter对话量。我们使用简单的Node.js请求和Twitter Streaming API's Status Filter方法收集了推文,并将响应保存在纯文本文件中。到目前为止,我们已经收集了大约1500万篇关于

的推文

现在我们正在尝试处理这些推文,并使用另一个简单的Node.js脚本将相关信息(uid,时间戳,文本和语言)上传到MongoDB数据库中,如this Gist所示,该脚本也有我们收集的非常小的原始推文样本。将推文加载到数据库后,我们将过滤并聚合它们以导出我们需要的信息。

问题

所以这就是问题:当运行在数据库中保存推文的脚本时,它会引发意外的文件错误并终止。我已经验证了ReadStream和Lazy实例已经初始化,当脚本尝试对每一行进行操作并将该行解析为有效的JSON对象时,问题似乎正在发生。

有关为何发生这种情况或如何解决问题的想法?

示例堆栈跟踪

undefined:1
3","indices":[3,10]}]},"favorited":false,"retweeted":false,"filter_level":"low
                                                                          ^
SyntaxError: Unexpected end of input
    at Object.parse (native)
    at /home/ubuntu/ncaa/savetodb.js:31:34
    at Lazy.<anonymous> (/home/ubuntu/ncaa/node_modules/lazy/lazy.js:91:13)
    at Lazy.<anonymous> (/home/ubuntu/ncaa/node_modules/lazy/lazy.js:73:19)
    at Lazy.EventEmitter.emit (events.js:95:17)
    at yieldTo (/home/ubuntu/ncaa/node_modules/lazy/lazy.js:181:18)
    at Function.<anonymous> (/home/ubuntu/ncaa/node_modules/lazy/lazy.js:219:25)
    at Lazy.<anonymous> (/home/ubuntu/ncaa/node_modules/lazy/lazy.js:187:21)
    at Lazy.EventEmitter.emit (events.js:95:17)
    at ReadStream.<anonymous> (/home/ubuntu/ncaa/node_modules/lazy/lazy.js:50:22)

0 个答案:

没有答案