如何从JavaPairRDD中选择前N个元素? -Apache Spark

时间:2015-03-04 19:03:42

标签: apache-spark truncate

我已经获得了一个键/值对,并将其分类为一个新的JavaPairRDD

现在,我需要从中选择前5个元素,即获得一个包含前5个元素的新JavaPairRDD。

我该怎么做?

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

谢谢!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

要获得顶部(或底部)项目(并回答您提出的问题),您可以使用:

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

答案 2 :(得分:0)

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

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)