Я использую подход Spark Dstream. У меня есть входной RDD, который я кеширую, как только читаю.
val cachedDf = rdd
.repartition(200)
.persist(StorageLevel.MEMORY_AND_DISK).toDF()
Я также вижу, что входной rdd кэшируется на вкладке storage
пользовательского интерфейса моего приложения spark. Моя кафка топи c имеет 15 partitions
.
Однако, когда после каждого действия в кэшированном фрейме данных я вижу 15 задач, выполняющихся в моем приложении несколько раз (не только после первого действия, после каждого действия), что снижает скорость моего приложения в более длительном запустить.
Эти задачи выполняются в течение 2-3 минут и увеличиваются по мере увеличения числа обрабатываемых сообщений в пакете.
Что я не могу понять, так это то, что я перераспределяю свой фрейм данных и немедленно сохраняю его Какие 15 задач выполняются?
Каждая другая основная задача имеет 200 подзадач, что читается в этих 15 подзадачах?
Мое приложение снова читает из kafka?