Класс 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. Итерирует исходные данные, вызывает функцию маппера для каждого элемента, затем для каждого промежуточного набора данных, созданного на фазе Map, вызывает функцию редьюсера.
- emit() public
Добавляет новую запись в итоговый список результатов и необязательно присваивает ей ключ.
- emitIntermediate() public
Добавляет новую запись в набор данных с заданным ключом, обычно в результате сопоставления отдельной записи из исходных данных.
- 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 - исходные данные для обработки
- вызываемый
$mapper обработчик маппинга. Эта функция будет получать 3 аргумента: текущее значение, текущий ключ результата и экземпляр этого класса, поэтому вы можете использовать методы для вывода результата.
- вызываемый
$reducerнеобязательно null обработчик редьюсинга. Эта функция будет получать 3 аргумента: список значений внутри набора данных, имя набора данных, созданного на фазе маппинга и экземпляр этого класса.
_execute()source protected
_execute( )
Выполняет фактический алгоритм Map-Reduce. Итерирует исходные данные, вызывает функцию маппера для каждого элемента, затем для каждого промежуточного набора данных, созданного на фазе Map, вызывает функцию редьюсера.
Исключения
LogicExceptionесли emitIntermediate был вызван, но функция редьюсера не была предоставлена
emit()source public
emit( mixed $val , string|null $key = null )
Добавляет новую запись в итоговый список результатов и необязательно присваивает ей ключ.
Параметры
- смешанный
$val - Значение, которое нужно добавить в итоговый список результатов
- строка|null
$keyнеобязательно null - необязательный ключ для присвоения значению
emitIntermediate()source public
emitIntermediate( mixed $val , string $bucket )
Добавляет новую запись в набор данных с заданным ключом, обычно в результате сопоставления отдельной записи из исходных данных.
Параметры
- смешанный
$val - Запись для хранения в наборе данных
- строка
$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.8/class-Cake.Collection.Iterator.MapReduce.html