我正在構建Spark應用程序,並在一些自定義的Estimators/Transformers中使用Evaluator
類。我遇到了一個問題,Evaluator
基類沒有實現metricName
參數,它的大部分(所有?)後代(RegressionEvaluator
,BinaryClassificationEvaluator
等)都實現了。具體來說,當寫一個驗證器,以Estimator和Evaluator作爲參數時(.fit
,然後.evaluate
是一個訓練好的模型),我希望能夠存儲或記錄Evaluator
生成的metricName
和metricValue
。如果我將evaluator
參數明確地輸入爲RegressionEvaluator
或BinaryClassificationEvaluator
,但是如果我僅將其輸入爲基地Evaluator
,那麼編譯時會出現val getMetricName is not a member of ...
錯誤,這將非常簡單。我可以擴展Evaluator
類並使用它(如下所示),但是在其他區域(found Evaluator, required MyEvaluator
)中會產生一些類型不匹配問題,這些問題不利於僅使metricName
可用。將參數添加到Apache Spark的抽象評估程序類
trait HasMetricName extends Params {
val metricName: Param[String]
def getMetricName: String = $(metricName)
}
abstract class MyEvaluator extends Evaluator with HasMetricName
所以,我的問題:有沒有我可以混入或告訴我Evaluator
類有一個metricName
值或其他的方式插入MyEvaluator
類編譯一個簡單的方法是不會傳播類型不匹配錯誤在其他地區?理想的解決方案是簡單地編輯Evaluator
類來包含這個參數,但是它被埋在了頂層Apache項目中。
是啊,這非常有意義!謝謝! –