使用Apache Jena ExtendedIterator在具有大量三元组的Graph上进行迭代



我正在从DBpedia转储生成Apache Jena Graph,现在我想遍历所有" DBpedia -owl:abstract"。所以我这样做:

ExtendedIterator<Triple> iterator = Graph.find(Node.ANY, NodeFactory.createURI("dbpedia-owl:abstract"), Node.ANY);

但是当我尝试迭代时,内存消耗增加了,所以看起来像ExtendedIterator存储找到的节点。我使用VisualVM分析器,发现当我迭代时,com.hp.hpl.jena.graph.Node_URI的计数正在增加。我试着做iterator.reset(),但这不起作用。

我可以遍历所有DBpedia摘要而不存储节点吗?

对不起,我的英语不好。

你一定要把它们都放在一个图里吗?您可以在使用RIOT使用StreamRDF(或方便的子类)解析节点时处理它们。例如:

class MyHandler implements StreamRDF {
  ...
  public void triple(Triple triple) {
    if (triple.predicateMatches(DBpediaOWL.abstract)) {
      ... process ...
    }
  }
  ...
}
StreamRDF myHandler = new MyHandler();
RDFDataMgr.parse(myHandler, "dbpedia-file.nt");

最新更新