Spark Streaming - DStream中的Map的reduceByKey

时间:2014-10-26 15:57:55

标签: apache-spark streaming

如何在Spark / Spark Streaming中使用reduceByKey作为驻留在DStream中的普通Scala Map?

我有一个DStream[(String, Array[(String, List)])],我想将reduceByKey函数应用于内部Array[(String, List)](将所有列表连接在一起)

我可以通过将外部RDD转换为普通数组(以避免SparkContext对象上的序列化错误)在普通Spark中执行此操作,

然后运行foreach并将sc.parallelize()应用于内部Array[(String, List)]

但由于DStream没有直接转换为普通数组,因此我无法将sc.parallelize()应用于内部组件,因此没有reduceByKey函数。

我是Spark和Spark Streaming的新手(实际上是整个map-reduce概念),这可能不是正确的方法,所以如果有人可以建议更好的做法,请这样做。

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,所以希望你能想到这一点,但.... 为了能够在DStream上执行reduceByKey ...操作,您必须首先导入StreamingContext:

import org.apache.spark.streaming.StreamingContext._

这提供了扩展DStream的隐式方法。 完成此操作后,您不仅可以执行stock reduceByKey,还可以使用时间切片功能,如:

reduceByKeyAndWindow((a: List, b: List) => (a ::: b), Seconds(30), Seconds(30))

如果您想在滑动窗口中进行聚合,这些非常有用。 希望有所帮助!