Rdf 如何使用jena加载大型hdt文件
我正在处理大小为35GB的DBPedia hdt文件,我尝试使用HDTManager将该文件加载到模型中,代码如下Rdf 如何使用jena加载大型hdt文件,rdf,jena,dbpedia,Rdf,Jena,Dbpedia,我正在处理大小为35GB的DBPedia hdt文件,我尝试使用HDTManager将该文件加载到模型中,代码如下 HDT hdt = null; try { hdt = HDTManager.mapIndexedHDT("src/dbpedia2016-10.hdt", null); HDTManager.loadHDT("src/dbpedia20
HDT hdt = null;
try {
hdt = HDTManager.mapIndexedHDT("src/dbpedia2016-10.hdt", null);
HDTManager.loadHDT("src/dbpedia2016-10.hdt", null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HDTGraph graph = new HDTGraph(hdt,true);
Model model = ModelFactory.createModelForGraph(graph);
但我在这条线上出错了
hdt = HDTManager.mapIndexedHDT("src/dbpedia2016-10.hdt", null);
错误大小超出如下所示
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
at java.base/sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:941)
at org.rdfhdt.hdt.dictionary.impl.section.PFCDictionarySectionMap.<init>(PFCDictionarySectionMap.java:138)
at org.rdfhdt.hdt.dictionary.impl.section.DictionarySectionFactory.loadFrom(DictionarySectionFactory.java:84)
at org.rdfhdt.hdt.dictionary.impl.FourSectionDictionary.mapFromFile(FourSectionDictionary.java:134)
at org.rdfhdt.hdt.hdt.impl.HDTImpl.mapFromHDT(HDTImpl.java:279)
at org.rdfhdt.hdt.hdt.HDTManagerImpl.doMapIndexedHDT(HDTManagerImpl.java:66)
at org.rdfhdt.hdt.hdt.HDTManager.mapIndexedHDT(HDTManager.java:148)
at app.Gui.generateFeatureSet(Gui.java:574)
at app.Gui$4.actionPerformed(Gui.java:274)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6636)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6401)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中的异常:大小超过Integer.MAX\u值
位于java.base/sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:941)
在org.rdfhdt.hdt.dictionary.impl.section.pfcdictionaryseconmap上(pfcdictionaryseconmap.java:138)
位于org.rdfhdt.hdt.dictionary.impl.section.DictionarySectionFactory.loadFrom(DictionarySectionFactory.java:84)
位于org.rdfhdt.hdt.dictionary.impl.FourSectionDictionary.mapFromFile(FourSectionDictionary.java:134)
位于org.rdfhdt.hdt.hdt.impl.HDTImpl.mapFromHDT(HDTImpl.java:279)
位于org.rdfhdt.hdt.hdt.HDTManagerImpl.doMapIndexedHDT(HDTManagerImpl.java:66)
位于org.rdfhdt.hdt.hdt.HDTManager.mapIndexedHDT(HDTManager.java:148)
位于app.Gui.generateFeatureSet(Gui.java:574)
在app.Gui$4.actionPerformed(Gui.java:274)
在java.desktop/javax.swing.AbstractButton.fireActionPerformed上(AbstractButton.java:1967)
位于java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
在java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:405)
在java.desktop/javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:262)
在java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
位于java.desktop/java.awt.Component.ProcessMouseeEvent(Component.java:6636)
位于java.desktop/javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3342)
位于java.desktop/java.awt.Component.processEvent(Component.java:6401)
位于java.desktop/java.awt.Container.processEvent(Container.java:2263)
位于java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
位于java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
位于java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
位于java.desktop/java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4918)
位于java.desktop/java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4547)
位于java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
位于java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
位于java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762)
位于java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
位于java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
位于java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
位于java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
位于java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
位于java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
位于java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
位于java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
位于java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
位于java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
位于java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
位于java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
位于java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
位于java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
位于java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
位于java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
位于java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
在这种情况下,如何解决文件溢出问题。有没有其他方法来处理这么大的文件
我感谢你的帮助。
谢谢。这是在任何Jena代码之前发生的。具体来说,HDT代码试图创建一个大小超过2G的内存映射段。(行号与JDK11一致-2G限制是NIO API的一部分,因此它不是特定于版本的。)感谢您的评论,那么,我如何扩展这个限制以允许加载像这个35Gb的文件这样的大文件呢?我不太了解HDT的详细信息,但浏览代码时,FCDictionarySectionMap似乎会将一个大于2G的大小传递给JDK运行时,因为文件中有一个大于2G的块。这与你的代码无关;可能有一个HDT选项以不同的模式运行。一些java代码有一些类可以绕过这个限制。以前有报道:我已经对这个问题添加了评论。我猜这个文件是由HDT的C++版本编写的,没有这个java特定的限制。如果这是真的,用C++解包和用java版本重新打包可能会起作用(我还没尝试过)。希望更多知识渊博的人对问题/93的回应能提供解决方案。