我正在构建一个 Spark 应用程序,并Evaluator
在一些自定义 Estimators/Transformers 中使用该类。我遇到了一个问题,即Evaluator
基类没有实现metricName
大多数(全部?)其后代(RegressionEvaluator
,BinaryClassificationEvaluator
等)实现的参数。具体来说,当编写一个将 Estimator 和 Evaluator 作为参数的验证器(.fit
然后是经过训练的模型)时,.evaluate
我希望能够存储或记录由. 如果我将参数显式键入为 a或,那将非常简单,但如果我将它简单地键入为 base ,那么我会在编译时出错。我可以扩展metricName
metricValue
Evaluator
evaluator
RegressionEvaluator
BinaryClassificationEvaluator
Evaluator
val getMetricName is not a member of ...
Evaluator
类并使用它(如下所示),但这会在其他领域(found Evaluator, required MyEvaluator
)中产生一些类型不匹配的问题,这不值得仅仅metricName
提供可用的好处。
trait HasMetricName extends Params {
val metricName: Param[String]
def getMetricName: String = $(metricName)
}
abstract class MyEvaluator extends Evaluator with HasMetricName
所以,我的问题是:有没有一种简单的方法可以混合或告诉编译器我的Evaluator
类有一个metricName
值,或者MyEvaluator
以一种不会在其他区域传播类型不匹配错误的方式插入该类?理想的解决方案是简单地编辑Evaluator
类以包含此参数,但这隐藏在顶级 Apache 项目中。