apache-spark – Spark DStream排序并获取N个元素

我正在使用spark stream从kafka集群中读取数据.我想对DStream对进行排序并单独获得前N个.到目前为止,我已经使用了

val result = ds.reduceByKeyAndWindow((x: Double, y: Double) => x + y, 
                   Seconds(windowInterval), Seconds(batchInterval))
result.transform(rdd => rdd.sortBy(_._2, false))
result.print

我的问题是

>如何从dstream中仅获取前N个元素?
>变换操作由rdd应用rdd.那么结果会在所有rdds中的元素之间进行排序吗?如果没有如何实现呢?

最佳答案 您可以在DStream对象中使用transform方法,然后对输入RDD进行排序,并在列表中获取它的n个元素,然后过滤原始RDD以包含在此列表中.

注意:RDD和DStream都是不可变的,因此任何转换都将返回新的RDD或DStream,但不会在原始RDD或DStream中更改.

val n = 10
val topN = result.transform(rdd =>{
   val list = rdd.sortBy(_._2, false).take(n)
   rdd.filter(list.contains)
})
topN.print
点赞