Spec-Zone.ru › CakePHP 3.5

Класс MapReduce

Реализует упрощённую версию популярного алгоритма Map-Reduce. Ведёт себя как итератор для исходных переданных данных после обработки каждого результата, тем самым предлагая прозрачную оболочку для результатов, поступающих из любого источника.

Cake\Collection\Iterator\MapReduce реализует IteratorAggregate
Пространство имён: Cake\Collection\Iterator
Расположение: Collection/Iterator/MapReduce.php

Краткое описание свойств

  • $_counter protected
    integer
    Количество элементов, выпущенных на этапе Reduce
  • $_data protected
    Traversable|null
    Содержит исходные данные, которые необходимо обработать
  • $_executed protected
    boolean
    Выполнялась ли процедура Map-Reduce над данными
  • $_intermediate protected
    array

    Содержит отсортированные результаты, выпущенные на фазе map

  • $_mapper protected
    callable
    Функция, которая будет выполняться для каждой записи в исходных данных
  • $_reducer protected
    callable

    Функция, которая будет выполняться для каждой промежуточной записи, выпущенной на фазе Map

  • $_result protected
    array
    Содержит результаты, выпущенные на фазе reduce

Краткое описание методов

  • __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

обратный вызов map. Эта функция будет принимать 3 аргумента. Первый — текущее значение, второй — текущий ключ результата, третий — экземпляр этого класса, так что вы можете вызвать emitters результата.

callable $reducer необязательно null

обратный вызов reducer. Эта функция будет принимать 3 аргумента. Первый — список значений внутри контейнера, второй — имя контейнера, созданного на фазе mapping, и третий — экземпляр этого класса.

_execute()source protected

_execute( )

Выполняет фактический алгоритм Map-Reduce. Перебирает исходные данные и вызывает функцию mapper для каждого из них, затем для каждого промежуточного контейнера, созданного на фазе Map, вызывает функцию reduce.

Исключения

LogicException

если emitIntermediate был вызван, но функция reducer не была предоставлена


emit()source public

emit( mixed $val , string|null $key null )

Добавляет новую запись в окончательный список результатов и, по желанию, присваивает этой записи ключ.

Параметры

mixed $val
Значение, которое нужно добавить в окончательный список результатов
string|null $key необязательно null
Необязательный ключ, который нужно присвоить значению

emitIntermediate()source public

emitIntermediate( mixed $val , string $bucket )

Добавляет новую запись в контейнер, помеченный ключом $key, обычно в результате сопоставления одной записи из исходных данных.

Параметры

mixed $val
Сама запись для хранения в контейнере
string $bucket
имя контейнера, куда поместить запись

getIterator()source public

getIterator( )

Возвращает итератор с конечным результатом выполнения фаз Map и Reduce над исходными данными

Возвращает

ArrayIterator

Реализация

IteratorAggregate::getIterator()

Подробное описание свойств

$_countersource

protected целое число

Количество элементов, выпущенных на этапе Reduce

$_datasource

protected Traversable|null

Содержит исходные данные, которые необходимо обработать

$_executedsource

protected логическое значение

Выполнялась ли процедура Map-Reduce над данными

false

$_intermediatesource

protected массив

Содержит отсортированные результаты, выпущенные на фазе map

[]

$_mappersource

protected вызываемая функция

Функция, которая будет выполняться для каждой записи в исходных данных

$_reducersource

protected вызываемая функция

Функция, которая будет выполняться для каждой промежуточной записи, выпущенной на фазе Map

$_resultsource

protected массив

Содержит результаты, выпущенные на фазе reduce

[]

© 2005–2018 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.5/class-Cake.Collection.Iterator.MapReduce.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API