如何使用RDFLib解析大数据集?

9 投票
1 回答
6518 浏览
提问于 2025-04-16 15:49

我正在尝试用RDFLib 3.0来解析几个大图,但它在处理第一个图时没问题,到了第二个图就出错了(内存错误)……看起来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

1 个回答

10

这些RDF文件里有多少个三元组呢?我试过用rdflib,结果发现它的处理能力最多只能应付几万的三元组,如果运气好的话。对于几百万个三元组的文件,它根本无法很好地处理。

目前最好的解析工具是来自Redland Librariesrapper。我首先建议你不要使用RDF/XML格式,而是选择ntriples。ntriples比RDF/XML更轻便。你可以用rapper把RDF/XML格式转换成ntriples格式:

rapper -i rdfxml -o ntriples YOUR_FILE.rdf > YOUR_FILE.ntriples

如果你喜欢用Python,可以使用Redland的Python绑定

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库解析过几GB的大文件,没遇到什么问题。

如果你要处理大数据集,最终可能需要把数据存入一个可扩展的三元组存储库。我通常使用的是4store。4store内部使用redland来解析RDF文件。从长远来看,我认为选择一个可扩展的三元组存储库是必须的。这样你就可以使用SPARQL来查询数据,还可以用SPARQL/Update来插入和删除三元组。

撰写回答