如何 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)
我得到了一个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)