2016-12-28 4 views
0

아래 코드는 평균 값을 찾는 데 사용됩니다. 암시 적 num : 평균 함수에 숫자 [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))) 

(암시 적 NUM : 숫자 [T])를 사용하는 이유를 알고 도와주세요 매개 변수를.

답변

0

스칼라에는 숫자 형식에 대한 수퍼 클래스가 없습니다. 이것은 T을 제한 할 수 없다는 것을 의미합니다. 평균값이 의미있는 수입니다 (일반 오브젝트의 평균을 실제로 수행 할 수는 없습니다). 암시 적으로 추가하면 double로 변환되는 toDouble 메서드가 있는지 확인합니다.

항상 변환 함수를 전달할 수 있지만 추가 매개 변수를 의미하므로 대신 숫자가 사용됩니다. average (List ("bla"))와 같은 일을한다면 숫자를 찾을 수 없다는 불만이있을 것입니다.

도 참조 https://twitter.github.io/scala_school/advanced-types.html#otherbounds

관련 문제