我正在尝试使用libraptor2 [版本2-2.0.10]从Freebase Data Dumps解析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的内存消耗?
答案 0 :(得分:1)
可能没有解析导致你的问题。解析器一次读取输入的一个令牌,当它找到三元组时,它会将它发送给序列化器。但是,序列化到乌龟需要大量内存。序列化程序首先在内存中构建整个图形,并且只有在添加了所有三元组时,图形才会被写为乌龟。
因此,将输出格式从面向图形的乌龟更改为一些面向三重语法,例如ntriples
。
评论后更新。
由于内存问题依然存在,计数模式会在解析后抛出三元组,这肯定也是解析器内存问题。
不确定您最终想要对数据做什么,但这里可能有所帮助。 请注意,freebase数据格式是面向行的“带有turtle名称空间的ntriples”,因此使用简单的文本文件处理工具处理更易于管理的块是相对简单的:
保留文件头中的@prefix
声明到所有块。
在三重换行边界处剪切数据。