Умножение матриц с 1 шагом MapReduce
MapReduce - это метод, в котором огромная программа подразделяется на небольшие задачи и выполняется параллельно, чтобы ускорить вычисления, сэкономить время и в основном используется в распределенных системах. Он состоит из 2 важных частей:
- Mapper: принимает необработанные данные и организует их в пары ключ-значение. Например, в словаре вы ищете слово «Данные», и его значение связано с «фактами и статистикой, собранными вместе для справки или анализа». Здесь ключ - это данные, а значение - это факты и статистика, собранные вместе для справки или анализа.
- Редуктор: отвечает за параллельную обработку данных и за конечный результат.
Давайте рассмотрим пример умножения матриц для визуализации MapReduce. Рассмотрим следующую матрицу:

2 × 2 матрицы A и B
Здесь матрица 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)
Таким образом, окончательная матрица:

Окончательный результат умножения матрицы.