Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Escriba una función de reducción

Rol de la función reducir en MapReduce

requiere una función de asignación de entrada que recibe fragmentos de datos y que genera resultados intermedios y una función de reducción de entrada que lee los resultados intermedios y produce un resultado final.mapreduce Por lo tanto, es normal dividir un cálculo en dos piezas relacionadas para el mapa y reducir las funciones para que se cumplan por separado. Por ejemplo, para encontrar el valor máximo en un conjunto de datos, la función de mapa puede encontrar el valor máximo en cada fragmento de datos de entrada y, a continuación, la función de reducción puede encontrar el valor máximo único entre todos los máximos intermedios.

Esta figura muestra la fase de reducción del algoritmo.mapreduce

La fase de reducción del algoritmo tiene los siguientes pasos:mapreduce

  1. El resultado de la fase Map del algoritmo es un objeto intermedio que contiene todos los pares clave-valor agregados por la función map.mapreduceKeyValueStore Antes de llamar a la función de reducción, agrupa los valores del objeto intermedio por clave única.mapreduceKeyValueStore Cada clave única en el objeto intermedio da como resultado una sola llamada a la función de reducción.KeyValueStore

  2. Para cada clave, crea un objeto que contiene todos los valores asociados a esa clave.mapreduceValueIterator

  3. La función de reducción se desplaza a través de los valores del objeto utilizando las funciones y, que normalmente se utilizan en un bucle.ValueIteratorhasnextgetnextwhile

  4. Después de realizar un cálculo de Resumen, la función reducir agrega uno o más pares clave-valor al objeto final mediante las funciones y.KeyValueStoreaddaddmulti

La fase de reducción del algoritmo se completa cuando la función de reducción procesa todas las claves intermedias únicas y sus valores asociados.mapreduce El resultado de esta fase del algoritmo (similar a la fase map) es un objeto que contiene todos los pares clave-valor finales agregados por la función reducir.mapreduceKeyValueStore Después de la fase de reducción, extrae los pares clave-valor de la y los devuelve en un almacén de datos (un objeto de forma predeterminada).mapreduceKeyValueStoreKeyValueDatastore Los pares clave-valor en el almacén de datos de salida no están ordenados; aparecen en el mismo orden en que se agregaron mediante la función de reducción.

Requisitos para reducir la función

llama automáticamente a la función de reducción para cada clave única en el objeto intermedio, por lo que la función de reducción debe cumplir ciertos requisitos básicos para ejecutarse correctamente durante estas llamadas automáticas.mapreduceKeyValueStore Estos requisitos colectivamente aseguran el movimiento adecuado de los datos a través de la fase de reducción del algoritmo.mapreduce

Las entradas para la función de reducción son, y:intermKeyintermValIteroutKVStore

  • es una de las claves únicas añadidas por la función de mapa.intermKey Cada llamada a la función de reducción especifica una nueva clave única de las claves del objeto intermedio.mapreduceKeyValueStore

  • es el objeto asociado a la clave activa,.intermValIterValueIteratorintermKey Este objeto contiene todos los valores asociados a la clave activa.ValueIterator Desplácese por los valores utilizando las funciones y.hasnextgetnext

  • es el nombre del objeto final al que la función de reducción necesita agregar pares clave-valor.outKVStoreKeyValueStore Las funciones y utilizan este nombre de objeto para agregar pares clave-valor a la salida. toma los pares clave-valor de salida y los devuelve en la salida, que es un objeto de forma predeterminada.addaddmultimapreduceoutKVStoredatastoreKeyValueDatastore Si la función de reducción no agrega ningún par de clave-valor a, a continuación, devuelve un almacén de datos vacío.outKVStoremapreduce

Además de estos requisitos básicos para la función de reducción, los pares clave-valor agregados por la función reducir también deben cumplir estas condiciones:

  1. Las claves deben ser escalares numéricos, vectores de caracteres o cadenas. Las claves numéricas no pueden ser, lógicas, complejas o dispersas.NaN

  2. Todas las claves agregadas por la función reducir deben tener la misma clase, pero esa clase puede diferir de la clase de las claves agregadas por la función map.

  3. Si el argumento de is (el valor predeterminado), un valor agregado por la función de reducción puede ser cualquier objeto, incluidos todos los tipos de datos válidos.OutputTypemapreduce'Binary'MATLAB®MATLAB

  4. Si el argumento de is, entonces un valor agregado por la función de reducción puede ser un escalar numérico, un vector de carácter o una cadena.OutputTypemapreduce'TabularText' En este caso, el valor no puede ser, complejo, lógico o disperso.NaN

Nota

Los requisitos de par clave-valor anteriores pueden diferir cuando se utilizan otros productos.mapreduce Consulte la documentación del producto adecuado para obtener los requisitos de pares clave-valor específicos del producto.

Funciones de reducción de muestra

Estos ejemplos contienen algunas funciones de reducción utilizadas por los ejemplos de la carpeta.mapreducetoolbox/matlab/demos

Función de reducción simple

Uno de los ejemplos más simples de un reductor es, que es el reductor para el archivo de ejemplo.maxArrivalDelayReducer.mMaxMapReduceExample.m La función de mapa en este ejemplo encuentra el retardo de llegada máximo en cada fragmento de datos de entrada. A continuación, la función de reducción finaliza la tarea encontrando el valor máximo único entre todos los máximos intermedios. Para encontrar el valor máximo, el reductor se desplaza a través de los valores del objeto y compara cada valor con el máximo actual. solo llama a esta función reductor una vez, ya que el asignador agrega una única clave única al objeto intermedio.ValueIteratormapreduceKeyValueStore La función de reducción agrega un par clave-valor único a la salida.

type maxArrivalDelayReducer.m
function maxArrivalDelayReducer(intermKey, intermValIter, outKVStore) % Reducer function for the MaxMapreduceExample.  % Copyright 2014 The MathWorks, Inc.  % intermKey is 'PartialMaxArrivalDelay'. intermValIter is an iterator of % all values that has the key 'PartialMaxArrivalDelay'. maxVal = -inf; while hasnext(intermValIter)    maxVal = max(getnext(intermValIter), maxVal); end % The key-value pair added to outKVStore will become the output of mapreduce  add(outKVStore,'MaxArrivalDelay',maxVal); 

Función de reducción avanzada

Un ejemplo más avanzado de un reductor es, que es el reductor para el archivo de ejemplo.statsByGroupReducer.mStatisticsByGroupMapReduceExample.m La función de mapa de este ejemplo agrupa los datos de cada entrada utilizando un parámetro adicional (transportista aéreo, mes, etcétera) y, a continuación, calcula varias cantidades estadísticas para cada grupo de datos. La función de reducción finaliza la tarea recuperando las cantidades estadísticas y concatenándolas en vectores largos y, a continuación, utilizando los vectores para calcular las cantidades estadísticas finales para recuento, media, varianza, asimetría y curtosis. El reductor almacena estos valores como campos en una estructura, de modo que cada clave única tiene una estructura de cantidades estadísticas en la salida.

type statsByGroupReducer.m
function statsByGroupReducer(intermKey, intermValIter, outKVStore) % Reducer function for the StatisticsByGroupMapReduceExample.  % Copyright 2014 The MathWorks, Inc.  n = []; m = []; v = []; s = []; k = [];  % get all sets of intermediate statistics while hasnext(intermValIter)     value = getnext(intermValIter);     n = [n; value(1)];     m = [m; value(2)];     v = [v; value(3)];     s = [s; value(4)];     k = [k; value(5)]; end % Note that this approach assumes the concatenated intermediate values fit % in memory. Refer to the reducer function, covarianceReducer,  of the % CovarianceMapReduceExample for an alternative pairwise reduction approach  % combine the intermediate results count = sum(n); meanVal = sum(n.*m)/count; d = m - meanVal; variance = (sum(n.*v) + sum(n.*d.^2))/count; skewnessVal = (sum(n.*s) + sum(n.*d.*(3*v + d.^2)))./(count*variance^(1.5)); kurtosisVal = (sum(n.*k) + sum(n.*d.*(4*s + 6.*v.*d +d.^3)))./(count*variance^2);  outValue = struct('Count',count, 'Mean',meanVal, 'Variance',variance,...                  'Skewness',skewnessVal, 'Kurtosis',kurtosisVal);  % add results to the output datastore add(outKVStore,intermKey,outValue); 

Más funciones de reducción

Para obtener más información acerca de los patrones de programación comunes en las funciones Map o reduce, consulte.Construya algoritmos efectivos con MapReduce

Consulte también

| | | | |

Temas relacionados