我正在尝试使用 libraptor2 [版本 2-2.0.10] 从 Freebase 数据转储中解析 Turtle 转储,我的程序内存不足。所以,我尝试使用"rapper"程序,结果是一样的(内存不足):
# 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,然后死了。如何限制天秤座/说唱器的内存消耗?
可能是不是解析导致了您的问题。解析器一次读取一个标记的输入,当它可以找到三元组时,它会将其发送到序列化程序。但是,序列化为 turtle 需要大量内存。序列化程序首先在内存中构建整个图形,并且只有在添加所有三元组后,图形才会写出为。
因此,将输出格式从面向图形的 turtle 更改为一些面向三重的语法,例如 ntriples
.
评论后更新。
由于计数模式仍然存在内存问题,该模式在解析后会丢弃三元组,因此这肯定也是一个解析器内存问题。
不确定您最终想要如何处理数据,但这里有一些可能会有所帮助。请注意,freebase 数据格式是面向行的"带有 turtle 命名空间的 ntriples",因此处理到更易于管理的块相对简单,使用简单的文本文件处理工具:
保留从文件头到所有区块的
@prefix
声明。在三重(即换行边界)处剪切数据。