Невозможно сохранить модель XGBoost с искрой - PullRequest
0 голосов
/ 20 сентября 2019

Я обучаю и сохраняю модель XGBoost, как показано ниже:

Версия XGBoost 0.82

Версия Spark 2.4.2

Получить модель (вызывает функцию поезда)

def getModel(trainingData: DataFrame): PipelineModel = {
    val pipelineModel = train(trainingData)

    if (modelPathToSave != "") {
      pipelineModel.write.overwrite().save(modelPathToSave)
      println(f"Saved model to $modelPathToSave")
    }
    pipelineModel
    }

Модель поезда

def train(trainingData: DataFrame): PipelineModel = {
    val nh = new NullHandler()
      .setCols(hackyEncode(featureList))
      .setMethod("fill")

    val va = new VectorAssembler()
      .setInputCols(hackyDecode(nh.getCols).toArray)
      .setOutputCol(featuresCol)

    val xgb = new XGBoostClassifier()
      .setLabelCol("label")
      .setFeaturesCol("features")
      .setEta(0.3)
      .setMaxDepth(8)
      .setObjective("binary:logistic")
      .setEvalMetric("auc")  
      .setScalePosWeight(9)

    val pipeline = new Pipeline()
        .setStages(Array[PipelineStage](nh, va, xgb))

    pipeline.fit(trainingData)
}

Однако я получил эту ошибку:

Exception in thread "main" java.lang.NoSuchMethodError: shaded.json4s.jackson.JsonMethods$.parse(Lshaded/json4s/JsonInput;Z)Lshaded/json4s/JsonAST$JValue;
    at ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter$$anonfun$1$$anonfun$3.apply(DefaultXGBoostParamsWriter.scala:73)
    at ml.dmlc.xgboost4j.scala.spark.params.DefaultXGBoostParamsWriter$$anonfun$1$$anonfun$3.apply(DefaultXGBoostParamsWriter.scala:71)

Несмотря на наличие json4s в моем файле build.sbt.

  "org.json4s" %% "json4s-native" % "3.5.1",
  "org.json4s" %% "json4s-jackson" % "3.6.6", 

Кто-нибудь может помочь, пожалуйста?

1 Ответ

1 голос
/ 20 сентября 2019

Xgboost версии 0.82 не совместим с Spark 2.4.Вы можете перейти на Spark 2.3 или использовать версию 0.90 Xgboost.

Ссылка:

https://discuss.xgboost.ai/t/xgboost-0-8-2-and-spark-2-4-0-unable-to-save-pipeline-model-into-aws-s3/838

...