Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark数据流排序并获取N个元素_Apache Spark_Spark Streaming - Fatal编程技术网

Apache spark Spark数据流排序并获取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(_.

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

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中的元素之间排序吗?如果没有,如何实现

您可以在数据流对象中使用transform方法,然后对输入RDD进行排序,并在列表中获取其中的n个元素,然后过滤要包含在此列表中的原始RDD

注意:RDD和数据流都是不可变的,因此任何转换都将返回新的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[?]。你能告诉我你是怎么解决的吗?