gpt4 book ai didi

spark-streaming - 是否可以在 Spark Streaming 中获取每个 RDD 的前 n 个元素?

转载 作者:行者123 更新时间:2023-12-04 18:04:59 25 4
gpt4 key购买 nike

使用Spark Streaming时,是否可以得到第一个n DStream 中每个 RDD 的元素?在现实世界中,我的流由许多带有地理标记的事件组成,我想取最接近给定点的 100 个(或其他)进行进一步处理,但是一个简单的示例显示了我正在尝试做什么是这样的:

import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.ConstantInputDStream
import org.apache.spark.streaming.{Seconds, StreamingContext}

object take {
def main(args: Array[String]) {

val data = 1 to 10

val sparkConf = new SparkConf().setAppName("Take");
val streamingContext = new StreamingContext(sparkConf, Seconds(1))

val rdd = streamingContext.sparkContext.makeRDD(data)
val stream = new ConstantInputDStream(streamingContext, rdd)

// In the real world, do a bunch of stuff which results in an ordered RDD

// This obviously doesn't work
// val filtered = stream.transform { _.take(5) }

// In the real world, do some more processing on the DStream

stream.print()

streamingContext.start()
streamingContext.awaitTermination()
}
}

我知道我可以拉顶 n结果很容易返回给驱动程序,但这不是我想要在这种情况下做的事情,因为我需要在过滤后对 RDD 进行进一步处理。

最佳答案

为什么它不起作用?我认为你的例子很好。

  • 您应该计算每个事件的距离
  • 使用适合您的数据量的多个分区按距离对事件进行排序
  • 从每个分区中取出前 100 个事件(因此您将打乱初始数据的一小部分),使用 sparkContext.parallelize(data)
  • 使返回的集合成为新的 RDD。
  • 只用一个分区再次排序,这样所有的数据都在同一个数据集中打乱
  • 以前 100 个事件为例,这是您的前 100 个事件

  • 排序的代码在第 2 步和第 4 步中是相同的,您只需更改分区数。

    步骤1在DStream上执行,步骤2到5在转换操作中的RDD上执行。

    关于spark-streaming - 是否可以在 Spark Streaming 中获取每个 RDD 的前 n 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535606/

    25 4 0