Quoting from the mailing list:
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.
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.