【问题标题】:how to parse big datasets using RDFLib?如何使用 RDFLib 解析大数据集?
【发布时间】:2011-04-15 14:59:36
【问题描述】:

我正在尝试使用 RDFLib 3.0 解析几个大图,显然它处理第一个并在第二个(MemoryError)上死掉......看起来 MySQL 不再支持作为存储,你能建议一种方法吗?解析那些?

Traceback (most recent call last):
  File "names.py", line 152, in <module>
    main()
  File "names.py", line 91, in main
    locals()[graphname].parse(filename, format="nt")
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py", line 938, in parse
    location=location, file=file, data=data, **args)
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/graph.py", line 757, in parse
    parser.parse(source, self, **args)
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/nt.py", line 24, in parse
    parser.parse(f)
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py", line 124, in parse
    self.line = self.readline()
  File "/usr/local/lib/python2.6/dist-packages/rdflib-3.0.0-py2.6.egg/rdflib/plugins/parsers/ntriples.py", line 151, in readline
    m = r_line.match(self.buffer)
MemoryError

【问题讨论】:

  • 这些文件中有多少个三元组?它们有多大?

标签: python parsing graph rdf rdflib


【解决方案1】:

这些 RDF 文件有多少个三元组?我已经测试了rdflib,如果幸运的话,它的扩展范围不会超过几十个 ktriples。对于具有数百万个三元组的文件来说,它确实无法很好地执行。

目前最好的解析器是来自Redland Librariesrapper。我的第一个建议是不要使用RDF/XML,而是使用ntriples。 Ntriples 是一种比 RDF/XML 更轻量的格式。您可以使用 rapper 从 RDF/XML 转换为 ntriples:

rapper -i rdfxml -o ntriples YOUR_FILE.rdf &gt; YOUR_FILE.ntriples

如果你喜欢 Python,可以使用Redland python bindings

import RDF
parser=RDF.Parser(name="ntriples")
model=RDF.Model()
stream=parser.parse_into_model(model,"file://file_path",
                                      "http://your_base_uri.org")
for triple in model:
    print triple.subject, triple.predicate, triple.object

我已经用 redland 库解析了相当大的文件(几个千兆字节),没有问题。

最终,如果您要处理大型数据集,您可能需要将数据断言到可扩展的三元存储中,我通常使用的是4store。 4store 内部使用redland 来解析RDF 文件。从长远来看,我认为,你必须要做的是建立一个可扩展的三重商店。有了它,您将能够使用SPARQL 查询您的数据,并使用SPARQL/Update 插入和删除三元组。

【讨论】:

  • 感谢您的回复,我正在使用 ntriples,但也想使用对齐方式(在映射上有置信度值真的很酷,是否可以在 ntriples 中使用它们?)。不确定条目的数量,但每个文件的大小约为 1Gb(现在总共 8 个文件,但可以增长到 100 个)。可能现在我将开始迁移到 4store + Redland ...
  • ntriples 中的对齐方式?如果它们可以用 RDF 表示,它们也可以用 ntriples 表示。是的,对于您提到的文件数量和大小......绝对是 4store。您可以在 groups.google.com/group/4store-support 找到宝贵的帮助
  • 4store 听起来比我想象的要复杂一些,我只是想在我的笔记本电脑上运行它,用于我正在处理的学生项目。有机会只考虑三元组的子集,您知道仅在没有 4store 的情况下使用 Redland 的最大功能是什么吗?
  • 您可以使用红地商店。使用 SQLite 或 SleepyCat 作为 RDBMS 后端,但是……我自己没有尝试过。我不能说它的可扩展性。无论如何,我认为拥有如此大量数据的笔记本电脑不会与任何三重存储一起扩展。您可能需要将数据分区到不同的 KB。
  • @msalvadores 你能看看this question吗?
猜你喜欢
  • 2013-02-16
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
相关资源
最近更新 更多