如何 select 来自 JavaPairRDD 的前 N ​​个元素? -阿帕奇星火

How to select top N elements from a JavaPairRDD ? -Apache Spark

我得到了一个key/value对,并将其整理成一个新的JavaPairRDD

现在,我需要select其中的前 5 个元素,即获取其中包含前 5 个元素的新 JavaPairRDD。

我该怎么做?

有没有比使用 flatMap 更简单的方法,因为它似乎是不必要的额外工作?

谢谢!

假设您不关心顺序,您可以使用 RDD.take(5) 获取 RDD 中的前 5 个元素。

要获取排名靠前(或排名靠后)的项目(并回答您提出的问题),您可以使用:

.takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T]

使用获取优先级队列的最小值的语法:

assuming resultRdd = RDD[Double]
resultRdd.map (y => y.takeOrdered(x)(Ordering.by[Double]())

使用获取优先级队列的最大值的语法:

assuming resultRdd = RDD[Double]
resultRdd.map (y => y.top(x)(Ordering.by[Double]())

注意: ( top 颠倒顺序并在内部调用 takeOrdered )

def top(num: Int)(implicit ord: Ordering[T]): Array[T] = takeOrdered(num)(ord.reverse)