我正在使用spark dstream方法。我有一个输入RDD,读取后便立即将其缓存。
val cachedDf = rdd
.repartition(200)
.persist(StorageLevel.MEMORY_AND_DISK).toDF()
我还看到输入rdd缓存在spark应用程序用户界面的storage
标签中。我的卡夫卡主题有15 partitions
。
但是,在对缓存的数据帧执行每个操作之后,我看到15个任务在我的应用程序中多次运行(不仅是在第一个操作之后,在每个操作之后),这降低了我的应用程序在较长时间内的运行速度。
这些任务运行2-3分钟,并随着每批处理的消息数的增加而增加。
我不明白的是,如果要重新划分数据帧并立即对其进行持久化,正在执行的15个任务是什么?
每个其他主要任务都有200个子任务,这15个子任务中正在读取什么?
我的应用程序是否再次从kafka读取?