我希望能够轻松地将一个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) 管道
如何修复?
答案 0 :(得分:0)
问题似乎与您的高级类型无关。
您的问题是,RandomForestEstimatorBuilder
声明它会返回Estimator[Model[_]]
,但您要返回Pipeline
。您需要返回Estimator[Model[_]]
的实例以匹配声明。这是一个Scala问题 - 而不是Spark - 它与您稍后要使用的evaluatePrecisionForUser
函数无关。