Я обучил модель 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)
Может кто угоднопомочь с проблемой?Спасибо