当第二个流的数据可能尚未可用时,如何比较Spark中的两个RDD?

时间:2018-05-27 17:00:06

标签: scala apache-spark apache-kafka

我正在开发一个Spark应用程序,用于从Kafka服务器的两个不同主题topic_atopic_b流式传输数据。我想要使​​用两个流并检查来自这两个主题的数据是否相等。

val streamingContext = new StreamingContext(sparkContext, Seconds(batchDuration))
val eventStream = KafkaUtils.createDirectStream[String, String](streamingContext, PreferConsistent, Subscribe[String, String](topics, consumerConfig))

def start(record: (RDD[ConsumerRecord[String, String]], Time)): Unit = {
    // ...

    def cmp(rddA: RDD[ConsumerRecord[String, String]], rddB: RDD[ConsumerRecord[String, String]]): Unit = {
        // Do compare...
        // but rddA or rddB may be empty! :-(
    }

    val rddTopicA = rdd.filter(_.topic == 'topic_a')
    val rddTopicB = rdd.filter(_.topic == 'topic_b')
    cmp(rddTopicA, rddTopicB)

}


eventStream.foreachRDD((x, y) => start((x, y)))
streamingContext.start()
streamingContext.awaitTermination()

问题在于,当比较cmp中的两个RDD时,其中一个RDD可能为空,因为数据流可能尚未在Kafka中可用。是否有可能等到两个RDD具有相同的行数然后开始比较?或者首先将具有数据的RDD转换为DataSet,然后临时存储以供以后比较?

0 个答案:

没有答案