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

问题描述

| 我正在尝试使用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
    

解决方法

这些RDF文件上有多少个三元组?我已经测试了
rdflib
,如果您很幸运,它的缩放比例不会超过几十个三倍。对于具有数百万个三元组的文件,它实际上无法很好地执行。 最好的解析器是Redland Libraries中的
rapper
。我的第一个建议是不要使用
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库解析了相当大的文件(几个千兆字节),没有问题。 最终,如果您要处理大型数据集,则可能需要将数据声明到可伸缩的三重存储中,我通常使用的是4store。 4store内部使用redland解析RDF文件。从长远来看,我认为,要做可扩展的三重存储是您要做的。有了它,您将能够使用SPARQL查询数据,并使用SPARQL / Update来插入和删除三元组。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...