Класс 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
$reducerнеобязательный 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
$keyнеобязательный 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–2016 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.
http://api.cakephp.org/3.2/class-Cake.Collection.Iterator.MapReduce.html