Spark Structured Streaming: влияет ли загрузка обработки на скорость ввода / numInputRecords?

#apache-spark #spark-streaming #spark-structured-streaming #azure-eventhub

#apache-spark #искровая потоковая передача #spark-structured-streaming #azure-eventhub

Вопрос:

Мое текущее структурированное потоковое приложение записывает данные в огромную дельта-таблицу. Когда я (останавливаю поток) и указываю на запись в совершенно новую дельта-таблицу:

  1. Это становится намного быстрее — длительность пакета уменьшается почти на 1/4
  2. Скорость ввода увеличивается почти в 3 раза

Я понимаю, что это может стать быстрее, поскольку любые агрегации / записи, которые он выполняет в старой / большей таблице, не нужны в новой таблице. Но я надеюсь, что кто-нибудь сможет объяснить изменение скорости ввода?

Источник — Azure EventHubs.

Спасибо!

Комментарии:

1. Да, Майк. Вот как это представлено в блокноте Databricks. Извиняюсь, я не уточнил это в своем вопросе.

Ответ №1:

Отвечая на мой собственный вопрос:

Логика, лежащая в основе скорости ввода и скорости обработки, выглядит следующим образом:

 Input rate =  numInputRows (or batch size )/ Trigger Interval in secs
Processing Rate = numInputRows (or batch size )/ Batch Duration in secs
 

без интервала запуска они должны быть одинаковыми, потому что BatchDuration = интервал запуска.

Таким образом, при использовании таблицы большего размера с большим количеством разделов запись и агрегирование занимают больше времени, что увеличивает продолжительность пакета и тем самым снижает скорость ввода (и скорость обработки). Таким образом, это должно объяснить противоположный случай для небольших целевых таблиц с более высокой скоростью ввода / обработки.