Scala 如何将多个RDD的数据流转换为单个RDD

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?每

基本上,我使用single Spark Streaming consumer[直接方法]使用多个卡夫卡主题的数据

val dStream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet).map(_._2)
批处理间隔为
30秒

我这里有几个问题

  • 当我在数据流上调用foreachRDD时,数据流是否会包含多个RDD而不是单个RDD?每个主题是否会创建单独的RDD
  • 如果是,我希望将所有RDD合并为单个RDD,然后处理数据。我该怎么做
  • 如果我的处理时间超过批处理间隔,那么数据流是否包含多个RDD
  • 我尝试使用下面的方法将数据流RDD合并为单个RDD。首先,我的理解正确吗?如果数据流总是返回单个RDD,则不需要下面的代码

    示例代码:

    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
    ,或者(免责声明:我是该文章的作者)