java面试题网站:www.javaoffers.com
top函数是一个柯理化 函数,全写为:def top(num: Int)(implicit ord: Ordering[T]): Array[T] 并且带有 隐式参数ordering类型,说明 该方法中肯定会 用到排序, 参数num : 是排序后取出前 num个。
demo1:
val a = sc.parallelize(List(2,4,5,6,2,1,9,9,9,10,10,10,34,56),2)
a.top(3)
输出的结果为:
Array[Int] = Array(56, 34, 10)
demo2:
val a = sc.parallelize(List("a","a","a","c","c","d","e","z","0"),2)
a.top(3)
输出的结果:
Array[String] = Array(z, e, d)
demo3:
val a = sc.parallelize(List(("a",2),("b",2),("c",1),("d",34),("e",5)),2)
a.top(3)
输出结果为:
Array[(String, Int)] = Array((e,5), (d,34), (c,1))
总结: top(n) 函数会先将数据 排序(升序:从左向右 逐渐变大),然后从右向左取的 前n 个,tuple是
按照k 进行升序。
这里讲一下降序的小技巧:
val a = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
a.map(x=>-x).top(3).map(x=>-x)
输出为:Array[Int] = Array(1, 2, 3),注意字符串不能这样,
字符可以这样:
val a = sc.parallelize(List("a","b","d","c"))
a.sortBy(c => c, true).take(3),ture 为升序,false为降序,take函数为从左向右依次抽取3个
输出为:
Array[String] = Array(a, b, c)
也可以直接,a.takeOrdered(3) 该函数为 先升序,然后从左向右依次抽取3个。
输出结果为:Array[String] = Array(a, b, c)