Использование неявного параметра в spark

Ниже код используется для поиска среднего значения.Я не уверен, почему неявный параметр num: Numeric[T] используется в средней функции.

Код:

val data = List(("32540b03",-0.00699), ("a93dec11",0.00624),
                ("32cc6532",0.02337) , ("32540b03",0.256023),
                ("32cc6532",-0.03591),("32cc6532",-0.03591))    

val rdd = sc.parallelize(data.toSeq).groupByKey().sortByKey()    

def average[T]( ts: Iterable[T] )**( implicit num: Numeric[T] )** = {    
   num.toDouble( ts.sum ) / ts.size    
}

val avgs = rdd.map(x => (x._1, average(x._2)))   

Пожалуйста, помогите узнать причину использования параметра (implicit num: Numeric[T]).

1 ответ

  1. Scala не имеет супер-класса для числовых типов. Это означает, что вы не можете ограничить T При добавлении неявного убедитесь, что он имеет метод toDouble, который преобразуется в double.

    Вы можете передать эту функцию преобразования всегда,но это будет означать дополнительный параметр, поэтому вместо numeric используется. Если бы вы сделали что-то вроде среднего(List(«bla»)), вы бы получили жалобу, что он не может найти число.

    См. также https://twitter.github.io/scala_school/advanced-types.html#otherbounds