2017-03-26 10 views
-1

スパークエスティメータを別のスパークエスティメータに簡単に置き換えたいと思っています。Scalaで一般的なスパークエスティメータを使用する

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

ここで、上記のメソッドに渡されるべき一般的な推定を返すクラスのいずれかです:: 私は一般的な推定器を使用する方法を作成しました

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

は、最後の行は、このエラーが発生します:

Error: type mismatch; found : org.apache.spark.ml.Pipeline required: org.apache.spark.ml.Estimator[org.apache.spark.ml.Model[]] Note: org.apache.spark.ml.PipelineModel <: org.apache.spark.ml.Model[] (and org.apache.spark.ml.Pipeline <: org.apache.spark.ml.Estimator[org.apache.spark.ml.PipelineModel]), but class Estimator is invariant in type M. You may wish to define M as +M instead. (SLS 4.5) pipeline

どのように修正できますか?

答えて

0

問題は、あなたの高級タイプとは関係がないようです。

RandomForestEstimatorBuilderEstimator[Model[_]]を返しますが、代わりにPipelineを返すと宣言しています。宣言に一致させるには、Estimator[Model[_]]のインスタンスを返す必要があります。これはSparkではなくScalaの問題です。後で使用するevaluatePrecisionForUser関数とは独立しています。

+0

ヒントをいただきありがとうございます! –

関連する問題