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