You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on May 3, 2022. It is now read-only.
I meet a problem when running batch layer.
I write a batch layer LRScalaUpdate with scala extends MLUpdate, override buildModel() and evaluate() method. then i get an exception when running the batch layer.
I'm wondering why it call MLUpdate.buildModel instead of my LRScalaUpdate.buildModel.
can you give me some suggestions? thank you
17/07/12 14:55:06 INFO cluster.YarnClusterScheduler: Removed TaskSet 7.0, whose tasks have all completed, from pool
17/07/12 14:55:06 INFO scheduler.DAGScheduler: ResultStage 7 (isEmpty at MLUpdate.java:360) finished in 0.093 s
17/07/12 14:55:06 INFO scheduler.DAGScheduler: Job 7 finished: isEmpty at MLUpdate.java:360, took 0.109474 s
Exception in thread "streaming-job-executor-0" java.lang.AbstractMethodError: com.cloudera.oryx.ml.MLUpdate.buildModel(Lorg/apache/spark/api/java/JavaSparkContext;
Lorg/apache/spark/api/java/JavaRDD;Ljava/util/List;Lorg/apache/hadoop/fs/Path;)Loryx/org/dmg/pmml/PMML;
at com.cloudera.oryx.ml.MLUpdate.buildAndEval(MLUpdate.java:314)
at com.cloudera.oryx.ml.MLUpdate.lambda$findBestCandidatePath$0(MLUpdate.java:259)
at java.util.stream.IntPipeline$4$1.accept(IntPipeline.java:250)
at java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:110)
...
Oryx shades its use of PMML classes to avoid classpath conflict with Spark. That's fine as it's internal to Oryx.
Except, one key thing I overlooked: MLUpdate actually forms a sort of API outside of the api package, and it does use one PMML class in its signature.
The text was updated successfully, but these errors were encountered:
Any solution I can think of ends up requiring an API change for MLUpdate, which is, while not a formal API, something that people might want to extend. However, it's clear anyone trying to extend it will find it doesn't work anyway.
The modified API would be a little clunky, making people pass Strings instead of PMML objects.
The workaround above isn't that bad and can be documented in the example project. Also, Spark 2.3 will shade JPMML and let Oryx un-shade this, in Oryx 2.6 perhaps.
For now I favor just documenting the workaround and removing all the shading later. It might be the least change.
srowen
added a commit
to srowen/oryx
that referenced
this issue
Jul 13, 2017
Quoting from the mailing list:
Oryx shades its use of PMML classes to avoid classpath conflict with Spark. That's fine as it's internal to Oryx.
Except, one key thing I overlooked: MLUpdate actually forms a sort of API outside of the api package, and it does use one PMML class in its signature.
The text was updated successfully, but these errors were encountered: