Проблема с сохранением модели Xgboost в spark scala - PullRequest
0 голосов
/ 12 сентября 2018

Я обучил модель xgboost в Spark Scala следующим образом:

val xgbParamGrid = new ParamGridBuilder()
  .addGrid(xgb.maxDepth, Array(5, 10))
  .addGrid(xgb.maxBins, Array(2))
  .addGrid(xgb.minChildWeight, Array(0.2))
  .addGrid(xgb.eta, Array(0.015))
  .addGrid(xgb.alpha, Array(0.8, 0.9))
  .addGrid(xgb.lambda, Array(0.9, 1.0))
  .build()

// Create the XGBoost pipeline
val pipeline = new Pipeline().setStages(Array(xgb))

val evaluator = new MulticlassClassificationEvaluator()
  .setLabelCol("label")
  .setPredictionCol("prediction")
  .setMetricName("accuracy")

val cv = new CrossValidator()
  .setEstimator(pipeline)
  .setEvaluator(evaluator)
  .setEstimatorParamMaps(xgbParamGrid)
  .setNumFolds(3)

val xgbModel = cv.fit(trainingData)

val xgbBest = xgbModel.bestModel.asInstanceOf[PipelineModel].stages(0).asInstanceOf[XGBoostClassificationModel]

Затем я попытался сохранить ее в локальном формате:

xgbBest.write.overwrite.save(modelSavePath)

, но получил сообщение об ошибке:

Исключение в потоке "main" java.lang.ClassCastException: java.lang.Integer нельзя преобразовать в java.lang.Long в scala.runtime.BoxesRunTime.unboxToLong (BoxesRunTime.java:105) в организации..apache.spark.ml.param.LongParam.jsonEncode (params.scala: 480) в ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter $$ anonfun $ 1 $$ anonfun $ 3.apply (по умолчаниюXGBoostParamsWrit:)в ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter $$ anonfun $ 1 $$ anonfun $ 3.apply (DefaultXGBoostParamsWriter.scala: 71) в scala.collection.TraversableLike $$ anonfun $ map $ 1.Lackable (можно использовать для поиска)234) в scala.collection.TraversableLike $$ anonfun $ map $ 1.apply (TraversableLike.scala: 234) в scala.collection.mutable.ResizableArray $ class.foreach (ResizableArray.scala: 59) в scala.collection.mutable.ArrayBuffer.foreach (ArrayBuffer.scala:48) в scala.collection.TraversableLike $ class.map (TraversableLike.scala: 234) в scala.collection.AbstractTraversable.map (Traversable.scala: 104) в ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter $$anonfun $ 1.apply (DefaultXGBoostParamsWriter.scala: 71) в ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter $$ anonfun $ 1.apply (DefaultXGBoostParamsWriter.scala: 69) в scalar.Ose.) в ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter $ .getMetadataToSave (DefaultXGBoostParamsWriter.scala: 69) в ml.dmlc.xgboost4j.scala.spark.params.DefaultXriterSataStams (WR) WRAP) ()ml.dmlc.xgboost4j.scala.spark.XGBoostClassificationModel $ XGBoostClassificationModelWriter.saveImpl (XGBoostClassifier.scala: 480) в org.apache.spark.ml.util.MLWriter.save (ReadWrite.scala: 103gb).scala: 125) по классификацииWithXgboost.main (классификацияWithXgboost.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.jetjj.Method.invoke (Method.java:498) в org.apache.spark.deploy.JavaMainApplication.start (SparkApplication.scala: 52) в org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $SparkSubmit $$ runMain (SparkSubmit.scala: 894) в org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1 (SparkSubmit.scala: 198) в org.apache.spark.deploy.SparkSubmit $ .submit (SparkSubmit.228) в org.apache.spark.deploy.SparkSubmit $ .main (SparkSubmit.scala: 137) в org.apache.spark.deploy.SparkSubmit.main (SparkSubmit.scala)

Может кто угоднопомочь с проблемой?Спасибо

...