我有一个spark streaming
应用程序,可以监听Kafka
主题。每隔n
分钟,它会获得一大块数据RDD
。我正在维护另一个RDD
,其中新的块是Union
- ed,然后是filter
。它就像时间轴上的滑动窗口。所以我的代码是这样的:
val slidingRDD : RDD[myObject] =_
// In streaming context
myKafkaInputDStream.transform{ rdd => deserialize(rdd) }
myKafkaInputDStream.forEachRDD{ chunkRDD => slidingRDD = slidingRDD.union(chunkRDD) }
// do some more stuff
slidingRDD.filter( myObject.timestamp > threshold )
由于我在Kafka
主题上有两个分区,因此我在chunkRDD
上获得了两个分区。在每次运行时,slidingRDD
中的分区数递增2。 filter
导致一些空分区和一些只有很少对象的分区。
问题:
因为,一个空分区也会产生一个任务,是否会对性能产生重大影响?有没有办法只删除空分区,没有任何数据移动(或避免repartition
)?