我是Spark Streaming的新手。我不知道下面代码之间的区别:
A:
val kafkaDStreams = (1 to 3).map { i =>
KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams,
topicsMap, StorageLevel.MEMORY_AND_DISK_SER)
.map(_._2)
}
ssc.union(kafkaDStreams).foreachRDD(......)
B:
val kafkaDStreams = (1 to 3).map { i =>
KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams,
topicsMap, StorageLevel.MEMORY_AND_DISK_SER)
.map(_._2).foreachRDD(......)
}
在Spark Streaming App中执行时,2个代码示例之间有何不同。有帮助吗?谢谢!
答案 0 :(得分:2)
我会向后做这件事,因为这可能更容易解释: - )
在第二个示例中,您通过(1 to 3).map { [...] createStream [...] }
创建了三个DStreams,然后在其上调用foreachRDD
,因此您可以并行执行三组不同的处理,因此foreachRDD
对于您在Spark流式上下文中设置的每个时间段,都会调用3次}函数 - 即在第一个时间段内,您将为流1调用foreachRDD
,为流2调用一个,为流3。
在第一个示例中,您创建相同的三个DStream,但随后在它们上调用union
以生成一个带有来自所有三个元素的DStream。这意味着您在每个时间段只能调用foreachRDD
函数,但RDD,但它现在包含来自流1,流2和流3的所有的元素。