takeOrdered
源码
/**
* 从指定的RDD中返回前k个(最小)元素的集合,底层排序,和top相反。
*
* @note 该方法仅在预期的数组很小的情况下使用,因为所有的数据都被加载到驱动程序的内存中。
*/
def takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T] = withScope {
if (num == 0) {
Array.empty
} else {
val mapRDDs = mapPartitions { items =>
// 优先级保留最大的元素,所以让我们颠倒顺序。
val queue = new BoundedPriorityQueue[T](num)(ord.reverse)
queue ++= util.collection.Utils.takeOrdered(items, num)(ord)