Search code examples
scalaapache-sparkgeneric-programmingimplicits

generic SortByValue based on Numeric


How do I create one implicit class for both use cases?

  implicit class SortableByIntValue(rdd:RDD[(String,Int)]){
    def sortByValue = rdd.sortBy(_._2)
  }
  implicit class SortableByDoubleValue(rdd:RDD[(String,Double)]){
    def sortByValue = rdd.sortBy(_._2)
  }

Solution

  • Try this:

    import scala.reflect.ClassTag
    
    implicit class SortableByValue[N : Numeric : ClassTag](rdd:RDD[(String,N)]){
      def sortByValue = rdd.sortBy(_._2)
    }
    

    This should be extensible to any type for which an Ordering is available ([O : Ordering] instead of [N : Numeric]), if desired.