Spec-Zone.ru › CakePHP 4.3

Класс MapReduce

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

Пространство имён: Cake\Collection\Iterator

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

  • $_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 необязательно

и необязательный ключ для присвоения значению

Возвращает

void

emitIntermediate() public

emitIntermediate(mixed $val, mixed $bucket): void

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

Параметры

mixed $val

Сама запись для хранения в контейнере

mixed $bucket

имя контейнера, куда следует поместить запись

Возвращает

void

getIterator() 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.3/class-Cake.Collection.Iterator.MapReduce.html

Spec-Zone.ru

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