为什么自定义Estimator最终会覆盖Nothing类型?

时间:2016-11-28 14:52:10

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

我正在实现一个自定义估算器,它无法访问参数ava.util.NoSuchElementException: Failed to find a default value for isInList。它的定义如下:

trait PreprocessingParams extends Params {
  final val isInList = new Param[Array[String]](this, "isInList", "list of isInList items")
}

为了更好地调试问题,我在https://gist.github.com/geoHeil/8dc7a6b6938a517f068e7fd6a981ed12创建了一个最小示例,ExampleTrans工作正常。但是,我更愿意将变压器的功能包含在估算器中,该估算器也会执行一些数据清理。

但现在我面临奇怪的编译问题overriding method has wrong type - expecting Nothing

我的ExampleEstimator的返回类型有什么问题?

1 个答案:

答案 0 :(得分:3)

您没有指定cHis.Where(c=>c.Date > StartDate && c.Date< EndDate && Customer_CustomerID == CustomerId && I_ID == ID) .Select(c=>new {Type = (c.noT != null), c.Duration}) .GroupBy(c=>c.Type).ToList() .Select(c=> new {Type = c.Key, TotalDuration = c.Sum(d=>Math.Ceiling((decimal)d.Duration/60)), Count = c.Count()}) 类型构造函数的泛型类型,因此使用了Estimator

使用:

Nothing

Estimator的完整定义如下:

class ExampleEstimator(override val uid: String) 
  extends Estimator[ExampleTransModel] with PreprocessingParams {
  ...
}

请注意扩展Model的通用类型abstract class Estimator[M <: Model[M]] extends PipelineStage