Класс 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 обратный вызов reduce. Эта функция будет принимать 3 аргумента. Первый — список значений внутри ведра, второй — имя ведра, которое было создано на фазе сопоставления, третий — экземпляр этого класса.
_execute()source protected
_execute( )
Выполняет фактический алгоритм Map-Reduce. Это итерация по исходным данным и вызов функции mapper для каждой, а затем для каждого промежуточного ведра, созданного на фазе Map, вызов функции reduce.
Исключения
LogicExceptionесли emitIntermediate был вызван, но функция reduce не была предоставлена
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() Подробное описание свойств
$_mappersource
protected callable
Вызываемый объект, который будет выполнен для каждой записи в исходных данных
$_reducersource
protected callable|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.6/class-Cake.Collection.Iterator.MapReduce.html