私はSparkアプリケーションを構築していますが、カスタムエスティメータ/トランスフォーマ内でEvaluator
クラスを使用しています。私はEvaluator
基底クラスがその子孫(RegressionEvaluator
、BinaryClassificationEvaluator
など)の大部分(すべて?)を実装しているmetricName
パラメータを実装していない問題にぶつかってきました。具体的には、評価者と評価者をパラメータとして(.fit
に、次に訓練モデルに.evaluate
に)Validatorを書き込むときに、によって生成された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
クラスを挿入コンパイラに伝えることができる簡単な方法があることをしませんpropogate型不一致エラー他の地域では?理想的な解決策は、このパラメータを含むようにEvaluator
クラスを編集することですが、これはトップレベルのApacheプロジェクトに埋め込まれています。
うん、それは完璧な理にかなっています!ありがとう! –