1

我正在尝试使用 libraptor2 [版本 2-2.0.10]解析来自Freebase 数据转储的 Turtle 转储,但我的程序内存不足。所以,我尝试使用“说唱歌手”程序,结果是一样的(内存不足):

#  raptor2-2.0.10/bin/rapper -i turtle -I - -o turtle -O - freebase-rdf-2013-06-02-00-00.ttl > /dev/null

rapper: Parsing URI file:///...ttl with parser turtle and base URI -
rapper: Serializing with serializer turtle
Killed

我观察内存消耗,它上升到 4GB 然后死了。如何限制 libraptor/rapper 的内存消耗?

4

1 回答 1

1

可能不是解析导致您的问题。解析器一次读取输入一个令牌,当它找到一个三元组时,它将它发送给序列化器。但是,序列化turtle 需要大量内存。序列化器首先在内存中构建整个图,并且只有在添加了所有三元组后,图才会被写为海龟。

因此,将输出格式从面向图的 turtle 更改为一些面向三元组的语法,例如ntriples.


评论后更新。

由于计数模式仍然存在内存问题,一旦解析就会丢弃三元组,这肯定也是解析器内存问题。

不确定您最终想要对数据做什么,但这里有一些可能会有所帮助。请注意,freebase 数据格式是面向行的“带有海龟命名空间的 ntriples”,因此使用简单的文本文件处理工具将其处理为更易于管理的块相​​对简单:

  1. 保留@prefix从文件头到所有块的声明。

  2. 在三重即换行边界处剪切数据。

于 2013-10-11T12:12:59.510 回答