Я много работал с Apache Spark последние несколько месяцев, но теперь я получил довольно сложную задачу, чтобы вычислить средний/минимальный/максимальный и т.д. в скользящем окне по парному RDD
, где компонент Key это тег даты, а компонент значения - это матрица. Поэтому каждая функция агрегации должна также возвращать матрицу, где для каждой ячейки усредняется среднее значение для всей этой ячейки за период времени.
Я хочу сказать, что хочу среднего раза каждые 7 дней, с раздвижным окном одного дня. Единица перемещения скользящего окна всегда одна, а затем единица размера окна (поэтому, если она каждые 12 недель, блок движения окна равен 1).
Моя первоначальная мысль теперь состоит в простое повторение, если мы хотим получить среднее значение за X дней, X раз и за каждый раз просто группировать элементы по дате со смещением.
Итак, если у нас есть такой сценарий:
Дни: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Матрицы: A B C D E F G H я J K L M N O
И мы хотим в среднем за 5 дней, я буду перебирать 5 раз и покажу группировку здесь:
Первая итерация:
Группа 1: (1, A) (2, B) (3, C) (4, D) (5, E)
Группа 2: (6, F) (7, G) (8, H) (9, I) (10, J)
Группа 3: (11, K) (12, L) (13, M) (14, N) (15, O)
Вторая итерация:
Группа 1: (2, B) (3, C) (4, D) (5, E) (6, F)
Группа 2: (7, G) (8, H) (9, I) (10, J), (11, K)
Группа 3: (12, L) (13, M) (14, N) (15, O)
Etcetera, и для каждой группы я должен выполнить процедуру fold/reduce, чтобы получить среднее значение.
Однако, как вы можете себе представить, это довольно медленно и, вероятно, довольно плохой способ сделать это. Я не могу понять, какой способ лучше это сделать.