Spark ML Params没有定义setter-为什么?

时间:2018-12-22 13:21:22

标签: scala apache-spark apache-spark-ml

我注意到,扩展Params的大多数(或所有)Spark ML特性(例如HasRegParam或通常的Has<whatever>Param)都没有定义setter,但它们确实定义了getter。参见:

https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/param/shared/sharedParams.scala

setter通常由扩展它们的ML模型的子类定义,例如LinearRegression等。有时,这意味着跨多个类再次定义相同的设置器,因为几个模型具有正则化参数(例如)。

这是什么原因,而不是在每个Params子类(例如,特征setRegParam)中定义设置器(例如HasRegParam)?我怀疑是由于设置器的返回类型this.type在设置ML模型的多个参数时启用了链接调用。我没有尝试过,但如果this.type在Params特性中仅定义一次而不是每个具体的模型类定义一次,也许不能与链式调用一起正常工作?

在实现自己的Params特性时,有没有更清洁的方法来避免不得不重新定义setter?

谢谢

0 个答案:

没有答案