【问题标题】:redland rapper/libraptor2 running out of memory on large RDF fileredland rapper/libraptor2 在大型 RDF 文件上内存不足
【发布时间】:2013-10-11 07:51:54
【问题描述】:

我正在尝试使用 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 的内存消耗?

【问题讨论】:

  • 这是一个很好的问题(并且有一个有用的答案)。但请注意,“是否有任何其他不受此问题影响的开源 rdf 解析库?”正在询问库,并且“要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是无关紧要的”。包含指向数据的链接也很好,以便其他人可以尝试重现此行为。综上所述,这是一个的问题,感谢您准确地提供了准确的错误消息!

标签: rdf turtle-rdf redland


【解决方案1】:

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

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


在 cmets 之后更新。

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

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

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

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

【讨论】:

  • 拉阿尔托,谢谢。我还不太熟悉 RDF 的所有细节。我的计划是将所有“主语、谓语、宾语”元组插入我自己的数据库。正如你所建议的,我尝试将 ttl 转换为 ntriples,但程序仍然内存不足,# raptor2-2.0.10/install/bin/rapper -i turtle -I - -o ntriples -O - freebase-rdf-2013 -06-02-00-00.ttl
  • 即使我让“说唱歌手”只计算海龟文件中三元组的数量(使用选项--count),它也会耗尽内存。
猜你喜欢
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多