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 mapa

Rol de función de mapa 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 mapa del algoritmo.mapreduce

La fase de mapa del algoritmo tiene los siguientes pasos:mapreduce

  1. Lee un solo fragmento de datos mediante la función en el almacén de datos de entrada y, a continuación, llama a la función Map para trabajar en el fragmento.mapreduceread

  2. La función Map, a continuación, trabaja en el fragmento individual de datos y agrega uno o más pares de clave-valor al objeto intermedio mediante las funciones o.KeyValueStoreaddaddmulti

  3. repite este proceso para cada uno de los fragmentos de datos en el almacén del datos de entrada, por lo que el número total de llamadas a la función de mapa es igual al número de fragmentos de datos.mapreduce La propiedad del datastore determina el número de fragmentos de datos.ReadSize

La fase de mapa del algoritmo se completa cuando la función de mapa procesa cada uno de los fragmentos de datos en el datastore de entrada.mapreduce El resultado de esta fase del algoritmo es un objeto que contiene todos los pares clave-valor agregados por la función map.mapreduceKeyValueStore Después de la fase de mapa, se prepara para la fase de reducción agrupando todos los valores del objeto por clave única.mapreduceKeyValueStore

Requisitos para la función Map

llama automáticamente a la función de mapa para cada fragmento de datos en el datastore de entrada.mapreduce La función de mapa debe cumplir ciertos requisitos básicos para ejecutarse correctamente durante estas llamadas automáticas. Estos requisitos colectivamente aseguran el movimiento adecuado de los datos a través de la fase de mapa del algoritmo.mapreduce

Las entradas de la función de mapa son, y:datainfointermKVStore

  • y son el resultado de una llamada a la función en la entrada, que se ejecuta automáticamente antes de cada llamada a la función de mapa.datainforeaddatastoremapreduce

  • es el nombre del objeto intermedio al que la función de correlación necesita añadir pares clave-valor.intermKVStoreKeyValueStore Las funciones y utilizan este nombre de objeto para agregar pares clave-valor.addaddmulti Si la función Map no agrega ningún par de clave-valor al objeto, entonces no llama a la función de reducción y el almacén de datos resultante está vacío.intermKVStoremapreduce

Además de estos requisitos básicos para la función Map, los pares clave-valor agregados por la función Map 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, complejas, lógicas o dispersas.NaN

  2. Todas las claves agregadas por la función Map deben tener la misma clase.

  3. Los valores pueden ser cualquier objeto, incluidos todos los tipos de datos válidos.MATLAB®MATLAB

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 mapa de ejemplo

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

Función de mapa de identidad

Una función de mapa que simplemente devuelve lo que se le pasa se llama un.mapreduceidentity mapper Un asignador de identidades es útil para aprovechar la agrupación de valores por clave única antes de realizar cálculos en la función de reducción. El archivo de asignador es uno de los Mapeadores utilizados en el archivo de ejemplo.identityMapper.mTSQRMapReduceExample.m

type identityMapper.m
function identityMapper(data, info, intermKVStore) % Mapper function for the MapReduce TSQR example. % % This mapper function simply copies the data and add them to the % intermKVStore as intermediate values.  % Copyright 2014 The MathWorks, Inc.  x = data.Value{:,:}; add(intermKVStore,'Identity', x); 

Función de mapa simple

Uno de los ejemplos más simples de un asignador de no identidad es, que es el asignador para el archivo de ejemplo.maxArrivalDelayMapper.mMaxMapReduceExample.m Para cada fragmento de datos de entrada, este asignador calcula el retardo de llegada máximo y agrega un par clave-valor al intermedio.KeyValueStore

type maxArrivalDelayMapper.m
function maxArrivalDelayMapper (data, info, intermKVStore) % Mapper function for the MaxMapreduceExample.  % Copyright 1984-2014 The MathWorks, Inc.   % Data is an n-by-1 table of the ArrDelay. As the data source is tabular, % the return of read is a table object. partMax = max(data.ArrDelay); add(intermKVStore, 'PartialMaxArrivalDelay',partMax); 

Función de mapa avanzada

Un ejemplo más avanzado de un asignador es, que es el asignador para el archivo de ejemplo.statsByGroupMapper.mStatisticsByGroupMapReduceExample.m Este asignador utiliza una función anidada para calcular varias cantidades estadísticas (recuento, media, varianza, etcétera) para cada fragmento de datos de entrada y, a continuación, agrega varios pares de clave-valor al objeto intermedio.KeyValueStore Además, este asignador usa cuatro argumentos de entrada, mientras que solo acepta una función de mapa con tres argumentos de entrada.mapreduce Para solucionar esto, pase el parámetro extra utilizando una función anónima durante la llamada a, como se describe en el ejemplo.mapreduce

type statsByGroupMapper.m
function statsByGroupMapper(data, ~, intermKVStore, groupVarName) % Mapper function for the StatisticsByGroupMapReduceExample.  % Copyright 2014 The MathWorks, Inc.  % Data is a n-by-3 table. Remove missing values first delays = data.ArrDelay; groups = data.(groupVarName); notNaN =~isnan(delays); groups = groups(notNaN); delays = delays(notNaN);  % find the unique group levels in this chunk [intermKeys,~,idx] = unique(groups, 'stable');  % group delays by idx and apply @grpstatsfun function to each group intermVals = accumarray(idx,delays,size(intermKeys),@grpstatsfun); addmulti(intermKVStore,intermKeys,intermVals);  function out = grpstatsfun(x) n = length(x); % count m = sum(x)/n; % mean v = sum((x-m).^2)/n; % variance s = sum((x-m).^3)/n; % skewness without normalization k = sum((x-m).^4)/n; % kurtosis without normalization out = {[n, m, v, s, k]}; 

Más funciones de mapa

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