В последнее время я планирую перенести мой автономный код ML Python на искровой. Труба ML в spark.ml
оказывается весьма удобной, с упрощенным API для объединения этапов алгоритма и поиска по гиперпараметрам.
Тем не менее, я нашел поддержку одной важной функции, которая неясна в существующих документах: кэширование промежуточных результатов. Важность этой функции возникает, когда трубопровод включает стадии интенсивного вычисления.
Например, в моем случае я использую огромную разреженную матрицу для выполнения нескольких скользящих средних по данным временных рядов для формирования входных функций. Структура матрицы определяется некоторым гиперпараметром. Этот шаг оказывается узким местом для всего конвейера, потому что я должен построить матрицу во время выполнения.
Во время поиска параметров у меня обычно есть другие параметры, кроме этого "структурного параметра". Поэтому, если я могу повторно использовать огромную матрицу, когда "структурный параметр" не изменяется, я могу сэкономить массу времени. По этой причине я намеренно сформировал свой код для кэширования и повторного использования этих промежуточных результатов.
Итак, мой вопрос: Может ли Spark ML конвейер обрабатывать промежуточное кэширование автоматически? Или мне нужно вручную создать код для этого? Если да, есть ли какая-нибудь лучшая практика, чтобы учиться?
P.S. Я просмотрел официальный документ и некоторые другие материалы, но ни один из них, похоже, не обсуждает эту тему.