Класс MapReduce
Реализует упрощённую версию популярного алгоритма Map-Reduce. Ведёт себя как итератор для исходных переданных данных после обработки каждого результата, тем самым предлагая прозрачную оболочку для результатов, поступающих из любого источника.
- Cake\Collection\Iterator\MapReduce реализует IteratorAggregate
Краткое описание свойств
-
$_counterprotectedКоличество элементов, выпущенных на этапе Reduceinteger -
$_dataprotectedСодержит исходные данные, которые необходимо обработатьTraversable|null -
$_executedprotectedВыполнялась ли процедура Map-Reduce над даннымиboolean -
$_intermediateprotectedarrayСодержит отсортированные результаты, выпущенные на фазе map
-
$_mapperprotectedФункция, которая будет выполняться для каждой записи в исходных данныхcallable -
$_reducerprotectedcallableФункция, которая будет выполняться для каждой промежуточной записи, выпущенной на фазе Map
-
$_resultprotectedСодержит результаты, выпущенные на фазе reducearray
Краткое описание методов
- __construct() publicКонструктор
- _execute() protected
Выполняет фактический алгоритм Map-Reduce. Перебирает исходные данные и вызывает функцию mapper для каждого из них, затем для каждого промежуточного контейнера, созданного на фазе Map, вызывает функцию reduce.
- emit() public
Добавляет новую запись в окончательный список результатов и, по желанию, присваивает этой записи ключ.
- emitIntermediate() public
Добавляет новую запись в контейнер, помеченный ключом $key, обычно в результате сопоставления одной записи из исходных данных.
- getIterator() public
Возвращает итератор с конечным результатом выполнения фаз Map и Reduce над исходными данными
Подробное описание методов
__construct()source public
__construct( Traversable $data , callable $mapper , callable $reducer null )
Конструктор
Пример:
Разделить все уникальные нечётные и чётные числа в массиве
$data = new \ArrayObject([1, 2, 3, 4, 5, 3]);
$mapper = function ($value, $key, $mr) {
$type = ($value % 2 === 0) ? 'even' : 'odd';
$mr->emitIntermediate($value, $type);
};
$reducer = function ($numbers, $type, $mr) {
$mr->emit(array_unique($numbers), $type);
};
$results = new MapReduce($data, $mapper, $reducer); Предыдущий пример генерирует следующий результат:
['odd' => [1, 3, 5], 'even' => [2, 4]]
Параметры
- Traversable
$data - исходные данные для обработки
- callable
$mapper обратный вызов map. Эта функция будет принимать 3 аргумента. Первый — текущее значение, второй — текущий ключ результата, третий — экземпляр этого класса, так что вы можете вызвать emitters результата.
- callable
$reducerнеобязательно null обратный вызов reducer. Эта функция будет принимать 3 аргумента. Первый — список значений внутри контейнера, второй — имя контейнера, созданного на фазе mapping, и третий — экземпляр этого класса.
_execute()source protected
_execute( )
Выполняет фактический алгоритм Map-Reduce. Перебирает исходные данные и вызывает функцию mapper для каждого из них, затем для каждого промежуточного контейнера, созданного на фазе Map, вызывает функцию reduce.
Исключения
LogicExceptionесли emitIntermediate был вызван, но функция reducer не была предоставлена
emit()source public
emit( mixed $val , string|null $key null )
Добавляет новую запись в окончательный список результатов и, по желанию, присваивает этой записи ключ.
Параметры
- mixed
$val - Значение, которое нужно добавить в окончательный список результатов
- string|null
$keyнеобязательно null - Необязательный ключ, который нужно присвоить значению
emitIntermediate()source public
emitIntermediate( mixed $val , string $bucket )
Добавляет новую запись в контейнер, помеченный ключом $key, обычно в результате сопоставления одной записи из исходных данных.
Параметры
- mixed
$val - Сама запись для хранения в контейнере
- string
$bucket - имя контейнера, куда поместить запись
getIterator()source public
getIterator( )
Возвращает итератор с конечным результатом выполнения фаз Map и Reduce над исходными данными
Возвращает
ArrayIteratorРеализация
IteratorAggregate::getIterator() Подробное описание свойств
$_executedsource
protected логическое значение
Выполнялась ли процедура Map-Reduce над данными
false
$_intermediatesource
protected массив
Содержит отсортированные результаты, выпущенные на фазе map
[]
$_mappersource
protected вызываемая функция
Функция, которая будет выполняться для каждой записи в исходных данных
$_reducersource
protected вызываемая функция
Функция, которая будет выполняться для каждой промежуточной записи, выпущенной на фазе Map
© 2005–2018 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/3.5/class-Cake.Collection.Iterator.MapReduce.html