Rdf 如何使用jena加载大型hdt文件

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

我正在处理大小为35GB的DBPedia hdt文件,我尝试使用HDTManager将该文件加载到模型中,代码如下

 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的回应能提供解决方案。