Ниже код используется для поиска среднего значения.Я не уверен, почему неявный параметр 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]).
Scala не имеет супер-класса для числовых типов. Это означает, что вы не можете ограничить T При добавлении неявного убедитесь, что он имеет метод toDouble, который преобразуется в double.
Вы можете передать эту функцию преобразования всегда,но это будет означать дополнительный параметр, поэтому вместо numeric используется. Если бы вы сделали что-то вроде среднего(List(«bla»)), вы бы получили жалобу, что он не может найти число.
См. также https://twitter.github.io/scala_school/advanced-types.html#otherbounds