我正在使用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
我的问题是
答案 0 :(得分:2)
您可以在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