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

时间:2015-07-10 14:28:27

标签: java performance jena apache-jena

我正在从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摘要吗?

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

你是否必须将它们全部保存在图表中?您可以在使用StreamRDF(或方便的子类)使用RIOT解析节点时处理节点。例如:

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");