Scala 如何将多个RDD的数据流转换为单个RDD
基本上,我使用single Spark Streaming consumer[直接方法]使用多个卡夫卡主题的数据Scala 如何将多个RDD的数据流转换为单个RDD,scala,spark-streaming,kafka-consumer-api,Scala,Spark Streaming,Kafka Consumer Api,基本上,我使用single Spark Streaming consumer[直接方法]使用多个卡夫卡主题的数据 val dStream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet).map(_._2) 批处理间隔为30秒 我这里有几个问题 当我在数据流上调用foreachRDD时,数据流是否会包含多个RDD而不是单个RDD?每
val dStream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet).map(_._2)
批处理间隔为30秒
我这里有几个问题
var dStreamRDDList = new ListBuffer[RDD[String]]
dStream.foreachRDD(rdd =>
{
dStreamRDDList += rdd
})
val joinedRDD = ssc.sparkContext.union(dStreamRDDList).cache()
//THEN PROCESS USING joinedRDD
//Convert joinedRDD to DF, then apply aggregate operations using DF API.
当我在数据流上调用foreachRDD时,数据流是否会包含多个RDD而不是单个RDD?每个主题是否会创建单独的RDD
不需要。即使您有多个主题,但在任何给定的批处理间隔中都会有一个RDD
如果我的处理时间超过批处理间隔,那么数据流是否包含多个RDD
不,如果处理时间长于批处理间隔,则只需读取主题偏移量。下一批的处理仅在上一个作业完成后开始
作为旁注,请确保您确实需要使用foreachRDD
,或者(免责声明:我是该文章的作者)