在Scala中使用通用火花估算器

时间:2017-03-26 19:51:30

标签: scala generics apache-spark

我希望能够轻松地将一个Spark Estimator替换为另一个。 我创建了使用通用估算器的方法:

def evaluatePrecisionForUser(estimator:Estimator[Model[_]]): Double ={
...
val model = estimator.fit(trainingData)
...
}

这是返回应该传递给上述方法的通用估算器的类之一:

object RandomForestEstimatorBuilder {
    def build(): Estimator[Model[_]] ={
    ...
    val pipeline = new Pipeline()
    ...
    pipeline
  }

最后一行给出了这个错误:

  

错误:类型不匹配;发现:org.apache.spark.ml.Pipeline   必需:org.apache.spark.ml.Estimator [org.apache.spark.ml.Model []]   注意:org.apache.spark.ml.PipelineModel<:   org.apache.spark.ml.Model [](和org.apache.spark.ml.Pipeline<:   org.apache.spark.ml.Estimator [org.apache.spark.ml.PipelineModel]),但   class Estimator在M型中是不变的。您可能希望将M定义为+ M   代替。 (SLS 4.5)       管道

如何修复?

1 个答案:

答案 0 :(得分:0)

问题似乎与您的高级类型无关。

您的问题是,RandomForestEstimatorBuilder声明它会返回Estimator[Model[_]],但您要返回Pipeline。您需要返回Estimator[Model[_]]的实例以匹配声明。这是一个Scala问题 - 而不是Spark - 它与您稍后要使用的evaluatePrecisionForUser函数无关。