Apache spark Spark数据流排序并获取N个元素
我正在使用spark stream从kafka集群读取数据。我想对一个数据流对进行排序,并单独获得前N个数据流。到目前为止,我已经使用Apache spark Spark数据流排序并获取N个元素,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我正在使用spark stream从kafka集群读取数据。我想对一个数据流对进行排序,并单独获得前N个数据流。到目前为止,我已经使用 val result = ds.reduceByKeyAndWindow((x: Double, y: Double) => x + y, Seconds(windowInterval), Seconds(batchInterval)) result.transform(rdd => rdd.sortBy(_.
val result = ds.reduceByKeyAndWindow((x: Double, y: Double) => x + y,
Seconds(windowInterval), Seconds(batchInterval))
result.transform(rdd => rdd.sortBy(_._2, false))
result.print
我的问题是
- 如何从数据流中仅获取前N个元素
- 转换操作由rdd逐个应用。那么,结果会在所有RDD中的元素之间排序吗?如果没有,如何实现
val n = 10
val topN = result.transform(rdd =>{
val list = rdd.sortBy(_._2, false).take(n)
rdd.filter(list.contains)
})
topN.print
你能解决这个问题吗?因为ReduceByAndWindow会导致单个rdd。rdd.sortBy().take(N)将起作用。result.transform(rdd=>rdd.sortBy(u.\u 2,false)),我认为在transform方法中添加take会导致错误,如find:Array,required:rdd[?]。你能告诉我你是怎么解决的吗?