Класс MapReduce
Реализует упрощенную версию популярного алгоритма Map-Reduce. Ведёт себя как итератор для исходных данных после обработки каждого результата, обеспечивая прозрачную оболочку для результатов, поступающих из любого источника.
- Cake\Collection\Iterator\MapReduce реализует IteratorAggregate
Краткое описание свойств
-
$_counterprotectedКоличество элементов, выпущенных на этапе Reducestring -
$_dataprotectedСодержит исходные данные, которые необходимо обработатьTraversable -
$_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 обратный вызов mapper. Эта функция будет получать 3 аргумента. Первый — текущее значение, второй — текущий ключ результата, третий — экземпляр этого класса, чтобы вы могли вызвать emitters результата.
- callable
$reduceroptional null обратный вызов reducer. Эта функция будет получать 3 аргумента. Первый — список значений внутри букета, второй — имя букета, созданного на этапе сопоставления, третий — экземпляр этого класса.
_execute()source protected
_execute( )
Выполняет фактический алгоритм Map-Reduce. Это итерация по исходным данным и вызов функции mapper для каждой, а затем для каждого промежуточного букета, созданного на этапе Map, вызывается функция reduce.
Исключения
LogicExceptionесли emitIntermediate был вызван, но функция reducer не была предоставлена
emit()source public
emit( mixed $value , string|null $key null )
Добавляет новую запись в окончательный список результатов и необязательно присваивает ключ этой записи.
Параметры
- mixed
$value - Значение, которое нужно добавить в окончательный список результатов
- string|null
$keyoptional null - Необязательный ключ для присвоения значению
emitIntermediate()source public
emitIntermediate( mixed $value , string $bucket )
Добавляет новую запись в пакет с меткой $key, обычно как результат сопоставления одной записи из исходных данных.
Параметры
- mixed
$value - Сама запись для хранения в букете
- string
$bucket - имя букета, в который поместить запись
getIterator()source public
getIterator( )
Возвращает итератор с конечным результатом выполнения этапов Map и Reduce над исходными данными
Возвращаемое значение
ArrayIteratorРеализация
IteratorAggregate::getIterator() Подробное описание свойств
$_intermediatesource
protected array
Содержит отсортированные результаты, выпущенные на этапе map
[]
$_mappersource
protected callable
Вызываемый объект, который будет выполнен для каждой записи в исходных данных
$_reducersource
protected callable
Вызываемый объект, который будет выполнен для каждой промежуточной записи, выпущенной на этапе Map
© 2005–2017 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.3/class-Cake.Collection.Iterator.MapReduce.html