Класс MapReduce
Реализует упрощённую версию популярного алгоритма Map-Reduce. Ведёт себя как итератор для исходных данных после обработки каждого результата, тем самым предоставляя прозрачную обёртку для результатов, поступающих из любого источника.
- Cake\Collection\Iterator\MapReduce реализует IteratorAggregate
Краткое описание свойств
-
$_counterprotectedКоличество элементов, выведенных на этапе Reduceinteger -
$_dataprotectedСодержит исходные данные, которые необходимо обработатьTraversable|null -
$_executedprotectedВыполнялась ли уже процедура Map-Reduce над даннымиboolean -
$_intermediateprotectedarrayСодержит отсортированные результаты, выведенные на этапе map
-
$_mapperprotectedВызываемый объект, который будет выполняться для каждой записи в исходных данныхcallable -
$_reducerprotectedcallable|nullВызываемый объект, который будет выполняться для каждой промежуточной записи, выводимой на этапе 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 обработчик mapper. Эта функция будет принимать 3 аргумента. Первый — текущее значение, второй — текущий ключ результата, а третий — экземпляр этого класса, так что вы можете вызывать эмиттеры результата.
- callable
$reducerнеобязательно null обработчик reducer. Эта функция будет принимать 3 аргумента. Первый — список значений внутри пакета, второй — имя пакета, созданного на этапе отображения, а третий — экземпляр этого класса.
_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() Подробное описание свойств
$_intermediatesource
protected массив
Содержит отсортированные результаты, выведенные на этапе map
[]
$_mappersource
protected вызываемый объект
Вызываемый объект, который будет выполняться для каждой записи в исходных данных
$_reducersource
protected вызываемый объект|null
Вызываемый объект, который будет выполняться для каждой промежуточной записи, выводимой на этапе Map
© 2005–present 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.7/class-Cake.Collection.Iterator.MapReduce.html