我正在使用Kafka Streaming从Kafka主题中读取数据,我想将流中获得的每个RDD加入到现有的RDD中。因此,我认为使用“转换”是最佳选择(除非任何人不同意,并提出更好的方法)
并且,我在Spark中的DStreams上阅读了以下“transform”方法示例:
val spamInfoRDD = ssc.sparkContext.newAPIHadoopRDD(...) // RDD containing spam information
val cleanedDStream = wordCounts.transform { rdd =>
rdd.join(spamInfoRDD).filter(...) // join data stream with spam information to do data cleaning
...
}
但是,让我们说,我在Kafka主题中有3个分区,并且我调用3个消费者来读取这些分区。现在,这个转换方法将在三个独立的线程中并行调用。
我不确定在这种情况下加入RDD是否是线程安全的,这不会导致数据丢失。 (考虑到RDD是不可变的)
另外,如果你说它的线程安全,那么性能不会很低,因为我们正在创建这么多的RDD然后加入它们?
有人可以建议吗?