Умножение матриц с 1 шагом MapReduce
MapReduce - это метод, в котором огромная программа подразделяется на небольшие задачи и выполняется параллельно, чтобы ускорить вычисления, сэкономить время и в основном используется в распределенных системах. Он состоит из 2 важных частей:
- Mapper: принимает необработанные данные и организует их в пары ключ-значение. Например, в словаре вы ищете слово «Данные», и его значение связано с «фактами и статистикой, собранными вместе для справки или анализа». Здесь ключ - это данные, а значение - это факты и статистика, собранные вместе для справки или анализа.
- Редуктор: отвечает за параллельную обработку данных и за конечный результат.
Давайте рассмотрим пример умножения матриц для визуализации MapReduce. Рассмотрим следующую матрицу:
Здесь матрица A представляет собой матрицу 2 × 2, что означает количество строк (i) = 2 и количество столбцов (j) = 2. Матрица B также является матрицей 2 × 2, где количество строк (j) = 2 и количество столбцов (k) = 2. Каждая ячейка матрицы помечена как Aij и Bij. Бывший. элемент 3 в матрице A называется A21, т.е. 2-я строка 1-го столбца. Теперь одношаговое матричное умножение имеет 1 преобразователь и 1 редуктор. Формула:
Mapper for Matrix A (k, v)=((i, k), (A, j, Aij)) for all k
Mapper for Matrix B (k, v)=((i, k), (B, j, Bjk)) for all i
Поэтому вычисление картографа для Матрицы A:
# k, i, j computes the number of times it occurs. # Here all are 2, therefore when k=1, i can have # 2 values 1 & 2, each case can have 2 further # values of j=1 and j=2. Substituting all values # in formula k=1 i=1 j=1 ((1, 1), (A, 1, 1)) j=2 ((1, 1), (A, 2, 2)) i=2 j=1 ((2, 1), (A, 1, 3)) j=2 ((2, 1), (A, 2, 4)) k=2 i=1 j=1 ((1, 2), (A, 1, 1)) j=2 ((1, 2), (A, 2, 2)) i=2 j=1 ((2, 2), (A, 1, 3)) j=2 ((2, 2), (A, 2, 4))
Вычисление картографа для Матрицы B
i = 1 j = 1 k = 1 ((1, 1), (B, 1, 5)) k = 2 ((1, 2), (B, 1, 6)) j = 2 k = 1 ((1, 1), (B, 2, 7)) j = 2 ((1, 2), (B, 2, 8)) i = 2 j = 1 k = 1 ((2, 1), (B, 1, 5)) к = 2 ((2, 2), (В, 1, 6)) j = 2 k = 1 ((2, 1), (B, 2, 7)) к = 2 ((2, 2), (В, 2, 8))
Формула Reducer:
Reducer(k, v)=(i, k)=>Make sorted Alist and Blist
(i, k) => Summation (Aij * Bjk)) for j
Output =>((i, k), sum)
Поэтому вычисление редуктора:
# Мы можем наблюдать из вычислений Mapper # что 4 пары являются общими (1, 1), (1, 2), # (2, 1) и (2, 2) # Сделайте отдельный список для Matrix A & # B с соседними значениями, взятыми из # Шаг Mapper выше: (1, 1) => Alist = {(A, 1, 1), (A, 2, 2)} Блист = {(B, 1, 5), (B, 2, 7)} Теперь Aij x Bjk: [(1 * 5) + (2 * 7)] = 19 ------- (i) (1, 2) => Alist = {(A, 1, 1), (A, 2, 2)} Блист = {(B, 1, 6), (B, 2, 8)} Теперь Aij x Bjk: [(1 * 6) + (2 * 8)] = 22 ------- (ii) (2, 1) => Alist = {(A, 1, 3), (A, 2, 4)} Блист = {(B, 1, 5), (B, 2, 7)} Теперь Aij x Bjk: [(3 * 5) + (4 * 7)] = 43 ------- (iii) (2, 2) => Alist = {(A, 1, 3), (A, 2, 4)} Блист = {(B, 1, 6), (B, 2, 8)} Теперь Aij x Bjk: [(3 * 6) + (4 * 8)] = 50 ------- (iv) Из (i), (ii), (iii) и (iv) заключаем, что ((1, 1), 19) ((1, 2), 22) ((2, 1), 43) ((2, 2), 50)
Таким образом, окончательная матрица: