2015-07-10 87 views
0

我從DBpedia轉儲生成Apache Jena圖,現在我想遍歷所有「dbpedia-owl:abstract」。 所以我做這樣的事情:在Graph上使用Apache Jena ExtendedIterator迭代大量的三元組

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

您是否必須將它們全部放在圖表中?您可以在使用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"); 
+0

感謝您的回答。目前我在Jena圖表中保存來自DBpedia轉儲的所有數據,以用於不同類型的提取(不僅用於提取「dbpedia-owl:abstract」)。所以您的目標解決方案需要一些時間來改變方式,以及我如何使用DBpedia數據的共同點。 因此,現在我正在尋找解決方案,這讓我有能力從先前創建的Jena tdb存儲中遍歷所有三元組,而不會增加gc無法釋放的內存消耗。 – Eugene