Класс MapReduce
Реализует упрощенную версию популярного алгоритма Map-Reduce. Действует как итератор для исходных переданных данных после обработки каждого результата, обеспечивая прозрачный оберточный слой для результатов, поступающих из любого источника.
- Cake\Collection\Iterator\MapReduce реализует IteratorAggregate
Подробное описание методов
__constructsource 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 - обработчик маппинга. Эта функция будет принимать 3 аргумента. Первый - текущее значение, второй - текущий ключ результата, а третий - экземпляр этого класса, чтобы вы могли вызвать эмиттеры результата.
- callable
$reducerнеобязательный null - обработчик редьюсинга. Эта функция будет принимать 3 аргумента. Первый - список значений внутри корзины, второй - имя корзины, созданной на фазе маппинга, а третий - экземпляр этого класса.
_executesource protected
_execute( )
Выполняет фактический алгоритм Map-Reduce. Итеративно обрабатывает исходные данные, вызывая функцию маппинга для каждого элемента, а затем для каждой промежуточной корзины, созданной на фазе маппинга, вызывает функцию редьюсинга.
Исключения
LogicExceptionесли emitIntermediate был вызван, но функция редьюсинга не была предоставлена
emitsource public
emit( mixed $value , string $key null )
Добавляет новую запись в окончательный список результатов и необязательно присваивает ключ этой записи.
Параметры
- mixed
$value - Значение, которое нужно добавить в окончательный список результатов
- string
$keyнеобязательный null - необязательный ключ, который нужно присвоить значению
emitIntermediatesource public
emitIntermediate( mixed $value , string $bucket )
Добавляет новую запись в корзину с меткой $key, обычно в результате маппинга одной записи из исходных данных.
Параметры
- mixed
$value - Сама запись для хранения в корзине
- string
$bucket - имя корзины, в которую нужно поместить запись
getIteratorsource public
getIterator( )
Возвращает итератор с конечным результатом выполнения фаз Map и Reduce над исходными данными
Возвращаемое значение
ArrayIterator\ArrayIterator
Реализация
IteratorAggregate::getIterator() Краткое описание свойств
© 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.1/class-Cake.Collection.Iterator.MapReduce.html