Класс MapReduce
Реализует упрощённую версию популярного алгоритма Map-Reduce. Ведёт себя как итератор для исходных данных после обработки каждого результата, предоставляя прозрачную оболочку для результатов, поступающих из любого источника.
Краткое описание свойств
- $_counter protected
intКоличество элементов, выпущенных на этапе Reduce
- $_data protected
TraversableСодержит исходные данные, которые необходимо обработать
- $_executed protected
boolВыполнялась ли процедура Map-Reduce над данными ранее
- $_intermediate protected
arrayСодержит отсортированные результаты, выпущенные на этапе map
- $_mapper protected
callableФункция, которая будет выполнена для каждой записи в исходных данных
- $_reducer protected
callable|nullФункция, которая будет выполнена для каждой промежуточной записи, выпущенной на этапе Map
- $_result protected
arrayСодержит результаты, выпущенные на этапе reduce
Краткое описание методов
-
__construct() public
Конструктор
-
_execute() protected
Выполняет фактический алгоритм Map-Reduce. Он итерируется по исходным данным и вызывает функцию mapper для каждой, затем для каждого промежуточного контейнера, созданного на этапе Map, вызывает функцию reduce.
-
emit() public
Добавляет новую запись в итоговый список результатов и, необязательно, присваивает ей ключ.
-
emitIntermediate() public
Добавляет новую запись в контейнер, помеченный ключом $key, обычно в результате отображения одной записи из исходных данных.
-
getIterator() public
Возвращает итератор с конечным результатом выполнения этапов Map и Reduce над исходными данными
Подробное описание методов
__construct() public
__construct(Traversable $data, callable $mapper, callable|null $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 аргумента. Первый — текущее значение, второй — текущий ключ результата, третий — экземпляр этого класса, позволяющий вызывать эмиттеры результата.
-
callable|null$reducer необязательно обратный вызов reducer. Эта функция получит 3 аргумента. Первый — список значений внутри контейнера, второй — имя контейнера, созданного на этапе отображения, третий — экземпляр этого класса.
_execute() protected
_execute(): void
Выполняет фактический алгоритм Map-Reduce. Он итерируется по исходным данным и вызывает функцию mapper для каждой, затем для каждого промежуточного контейнера, созданного на этапе Map, вызывает функцию reduce.
Возвращает
voidВозможные исключения
LogicExceptionесли emitIntermediate был вызван, но функция reducer не была предоставлена
emit() public
emit(mixed $val, mixed $key = null): void
Добавляет новую запись в итоговый список результатов и, необязательно, присваивает ей ключ.
Параметры
-
mixed$val Значение, которое нужно добавить в итоговый список результатов
-
mixed$key необязательно и необязательный ключ для присвоения значению
Возвращает
voidemitIntermediate() public
emitIntermediate(mixed $val, mixed $bucket): void
Добавляет новую запись в контейнер, помеченный ключом $key, обычно в результате отображения одной записи из исходных данных.
Параметры
-
mixed$val Сама запись для хранения в контейнере
-
mixed$bucket имя контейнера, куда следует поместить запись
Возвращает
voidgetIterator() public
getIterator(): Traversable
Возвращает итератор с конечным результатом выполнения этапов Map и Reduce над исходными данными
Возвращает
TraversableПодробное описание свойств
$_counter protected
Количество элементов, выпущенных на этапе Reduce
Тип
int$_data protected
Содержит исходные данные, которые необходимо обработать
Тип
Traversable$_executed protected
Выполнялась ли процедура Map-Reduce над данными ранее
Тип
bool$_intermediate protected
Содержит отсортированные результаты, выпущенные на этапе map
Тип
array$_mapper protected
Функция, которая будет выполнена для каждой записи в исходных данных
Тип
callable$_reducer protected
Функция, которая будет выполнена для каждой промежуточной записи, выпущенной на этапе Map
Тип
callable|null$_result protected
Содержит результаты, выпущенные на этапе reduce
Тип
array
© 2005–present 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/4.4/class-Cake.Collection.Iterator.MapReduce.html