Перекрестная проверка не проходит в Spark-ML - PullRequest
0 голосов
/ 23 января 2019

У меня есть исполнение Spark-ML с деревом решений и перекрестной проверкой внутри.

По неизвестной причине происходит сбой этой трассировки стека во время перекрестной проверки:

org.apache.spark.util.ThreadUtils $ .awaitResult (ThreadUtils.scala: 205) org.apache.spark.ml.tuning.CrossValidator $$ anonfun $ 4 $$ anonfun $ 6.apply (CrossValidator.scala: 164) org.apache.spark.ml.tuning.CrossValidator $$ anonfun $ 4 $$ anonfun $ 6.apply (CrossValidator.scala: 164) scala.collection.TraversableLike $$ anonfun $ Карта $ 1.Apply (TraversableLike.scala: 234) scala.collection.TraversableLike $$ anonfun $ Карта $ 1.Apply (TraversableLike.scala: 234) scala.collection.IndexedSeqOptimized $ class.foreach (IndexedSeqOptimized.scala: 33) scala.collection.mutable.ArrayOps $ ofRef.foreach (ArrayOps.scala: 186) scala.collection.TraversableLike $ class.map (TraversableLike.scala: 234) scala.collection.mutable.ArrayOps $ ofRef.map (ArrayOps.scala: 186) org.apache.spark.ml.tuning.CrossValidator $$ anonfun $ 4.Apply (CrossValidator.scala: 164) org.apache.spark.ml.tuning.CrossValidator $$ anonfun $ 4.Apply (CrossValidator.scala: 144) scala.collection.TraversableLike $$ anonfun $ Карта $ 1.Apply (TraversableLike.scala: 234) scala.collection.TraversableLike $$ anonfun $ Карта $ 1.Apply (TraversableLike.scala: 234) scala.collection.IndexedSeqOptimized $ class.foreach (IndexedSeqOptimized.scala: 33) scala.collection.mutable.ArrayOps $ ofRef.foreach (ArrayOps.scala: 186) scala.collection.TraversableLike $ class.map (TraversableLike.scala: 234) scala.collection.mutable.ArrayOps $ ofRef.map (ArrayOps.scala: 186) org.apache.spark.ml.tuning.CrossValidator.fit (CrossValidator.scala: 144) decisionTree.DecisionTreeDisplay.process (DecisionTreeDisplay.scala: 151)

Далее следуют некоторые следы стека потоков:

2019-01-23 16:26:21 ОШИБКА TaskSchedulerImpl: 91 - Исключение в statusUpdate java.util.concurrent.RejectedExecutionException: Задача org.apache.spark.scheduler.TaskResultGetter$$anon$3@764726a7 отклонено от java.util.concurrent.ThreadPoolExecutor@783b07b9 [Завершение работы, размер пула = 2, активных потоков = 2, задач в очереди = 0, выполненных задач = 4914] в java.util.concurrent.ThreadPoolExecutor $ AbortPolicy.rejectedExecution (ThreadPoolExecutor.java:2063) в java.util.concurrent.ThreadPoolExecutor.reject (ThreadPoolExecutor.java:830) в java.util.concurrent.ThreadPoolExecutor.execute (ThreadPoolExecutor.java:1379) в org.apache.spark.scheduler.TaskResultGetter.enqueueSuccessfulTask ​​(TaskResultGetter.scala: 61) в org.apache.spark.scheduler.TaskSchedulerImpl.liftedTree2 $ 1 (TaskSchedulerImpl.scala: 413) в org.apache.spark.scheduler.TaskSchedulerImpl.statusUpdate (TaskSchedulerImpl.scala: 394) в org.apache.spark.scheduler.local.LocalEndpoint $$ anonfun $ получить $ 1.applyOrElse (LocalSchedulerBackend.scala: 67) в org.apache.spark.rpc.netty.Inbox $$ anonfun $ процесса $ 1.Apply $ мкВ $ зр (Inbox.scala: 117) в org.apache.spark.rpc.netty.Inbox.safelyCall (Inbox.scala: 205) в org.apache.spark.rpc.netty.Inbox.process (Inbox.scala: 101) в org.apache.spark.rpc.netty.Dispatcher $ MessageLoop.run (Dispatcher.scala: 221) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) at java.lang.Thread.run (Thread.java:748)

Мой код перекрестной проверки:

 // define Cross-Validation
    val cv = new CrossValidator()
      .setEstimator(pipeline)
      .setEvaluator(evaluator)
      .setEstimatorParamMaps(paramGrid)
      .setNumFolds(3)
      .setSeed(seed)
      .setCollectSubModels(true) // requires version of spark >= 2.3.0
      .setParallelism(8) // requires version of spark >= 2.3.0

    val cvModel = cv.fit(trainInfile) //Fail here

В библиотеке ML, похоже, сбой в строке:

      val foldMetrics = foldMetricFutures.map(ThreadUtils.awaitResult(_, Duration.Inf))

Есть идеи?

...