当使用带有jpmml的树模型(版本1.1.16)时,是否存在大小限制?
当我有一个特别大的树(PMML大小为数百MB,数百万叶)时,对于某些输入,我会得到这样的例外:
org.jpmml.evaluator.PredicateUtil.evaluateSimplePredicate(PredicateUtil.java:79) at org.jpmml.evaluator.PredicateUtil.evaluate(PredicateUtil.java:54) at org.jpmml.evaluator.TreeModelEvaluator.evaluateNode(TreeModelEvaluator.java:171) at org.jpmml.evaluator.TreeModelEvaluator.handleTrue(TreeModelEvaluator.java:186) at org.jpmml.evaluator.TreeModelEvaluator.handleTrue(TreeModelEvaluator.java:197)在org.jpmml.evaluator.TreeModelEvaluator.handleTrue(TreeModelEvaluator.java:197) at org.jpmml.evaluator.TreeModelEvaluator.evaluateTree(TreeModelEvaluator.java:139) at org.jpmml.evaluator.TreeModelEvaluator.evaluateRegression(TreeModelEvaluator.java:94) at org.jpmml.evaluator.TreeModelEvaluator.evaluate(TreeModelEvaluator.java:77) at org.jpmml.evaluator.MiningModelEvaluator.evaluateSegmentation(MiningModelEvaluator.java:463) at org.jpmml.evaluator.MiningModelEvaluator.evaluateRegression( org.jpmml.evaluator.MiningModelEvaluator.evaluate(MiningModelEvaluator.java:130) at org.jpmml.evaluator.MiningModelEvaluator.evaluate(MiningModelEvaluator.java:106) at org.jpmml.evaluator.ModelEvaluator.evaluate(ModelEvaluator.java:263) at org.openscoring.service.ModelResource.evaluate(ModelResource.java:550) at org.openscoring.service.ModelResource.doEvaluate(ModelResource.java:404) )在org.openscoring.service.ModelResource.doEvaluateCsv(ModelResource.java:339) at org.openscoring.service.ModelResource.evaluateCsv(ModelResource.java:299) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native sun.reflect.NativeMethodAccessorImpl.invoke0(Native(在sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)在sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)在java.lang.reflect.Method.invoke(未知源)在org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:143) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:160) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:158) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:97) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:303) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:286) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1072) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:399) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)在org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)在org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper( org.eclipse.jetty.server.Server.handle(Server.java:497) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob )(QueuedThreadPool.java:635)在org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(不明来源)
发布于 2016-03-10 13:19:41
没有这样的限制,只要您使用64位操作系统,并且适当地增加了JVM堆大小(例如。通过设置-Xms8G -Xmx64G)。
您肯定应该考虑升级到最近的Openscoring/JPMML-评价器版本(例如。从1.1.16到1.2.12)。只要您有能力的硬件,那么一个开放取心实例就可以轻松地容纳数百GB (是的,不是MB)的PMML模型。
对于这个特殊的异常,我们知道一些JAXB库/JVM组合会在解组过程中损坏数据。您正在目睹一种情况,即某些SimplePredicate元素属性的值已“丢失”。例如,在Mac上运行Java1.7时就会发生这种情况。
您可以通过将Java版本升级到Java1.8来解决此异常。
https://stackoverflow.com/questions/35917130
复制相似问题