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.

Subconfiguración simple de datos con MapReduce

En este ejemplo se muestra cómo extraer un subconjunto de un conjunto de datos grande.

Hay dos aspectos de la subconfiguración o la realización de una consulta. Uno es seleccionar un subconjunto de las variables (columnas) en el conjunto de datos. El otro es seleccionar un subconjunto de las observaciones o filas.

En este ejemplo, la selección de variables tiene lugar en la definición del almacén de datos. (La función Map podría realizar una sub-selección adicional de variables, pero eso no está dentro del ámbito de este ejemplo). En este ejemplo, el rol de la función MAP es realizar la selección de observaciones. El rol de la función de reducción consiste en concatenar los registros de subseteado extraídos por cada llamada a la función map. Este enfoque asume que el conjunto de datos puede caber en la memoria después de la fase de mapa.

Preparar datos

Cree un almacén de datos utilizando el conjunto de información.airlinesmall.csv Este conjunto de datos de 12 megabyte contiene 29 columnas de información de vuelo para varias aerolíneas, incluidas las horas de llegada y salida. Este ejemplo utiliza 15 variables de las 29 variables disponibles en los datos.

ds = datastore('airlinesmall.csv', 'TreatAsMissing', 'NA'); ds.SelectedVariableNames = ds.VariableNames([1 2 5 9 12 13 15 16 17 ...     18 20 21 25 26 27]); ds.SelectedVariableNames 
 ans =    1x15 cell array    Columns 1 through 4      {'Year'}    {'Month'}    {'DepTime'}    {'UniqueCarrier'}    Columns 5 through 8      {'ActualElapsedTime'}    {'CRSElapsedTime'}    {'ArrDelay'}    {'DepDelay'}    Columns 9 through 13      {'Origin'}    {'Dest'}    {'TaxiIn'}    {'TaxiOut'}    {'CarrierDelay'}    Columns 14 through 15      {'WeatherDelay'}    {'NASDelay'}  

El almacén de datos trata los valores como ausentes y reemplaza los valores que faltan por valores predeterminados.'NA'NaN Además, la propiedad le permite trabajar solo con las variables de interés especificadas, que puede comprobar mediante.SelectedVariableNamespreview

preview(ds) 
 ans =    8x15 table      Year    Month    DepTime    UniqueCarrier    ActualElapsedTime    CRSElapsedTime    ArrDelay    DepDelay    Origin    Dest     TaxiIn    TaxiOut    CarrierDelay    WeatherDelay    NASDelay     ____    _____    _______    _____________    _________________    ______________    ________    ________    ______    _____    ______    _______    ____________    ____________    ________      1987     10        642          'PS'                 53                 57              8          12       'LAX'     'SJC'     NaN        NaN          NaN             NaN           NaN        1987     10       1021          'PS'                 63                 56              8           1       'SJC'     'BUR'     NaN        NaN          NaN             NaN           NaN        1987     10       2055          'PS'                 83                 82             21          20       'SAN'     'SMF'     NaN        NaN          NaN             NaN           NaN        1987     10       1332          'PS'                 59                 58             13          12       'BUR'     'SJC'     NaN        NaN          NaN             NaN           NaN        1987     10        629          'PS'                 77                 72              4          -1       'SMF'     'LAX'     NaN        NaN          NaN             NaN           NaN        1987     10       1446          'PS'                 61                 65             59          63       'LAX'     'SJC'     NaN        NaN          NaN             NaN           NaN        1987     10        928          'PS'                 84                 79              3          -2       'SAN'     'SFO'     NaN        NaN          NaN             NaN           NaN        1987     10        859          'PS'                155                143             11          -1       'SEA'     'LAX'     NaN        NaN          NaN             NaN           NaN     

Ejecute MapReduce

La función requiere una función de mapa y una función de reducción como entradas.mapreduce El asignador recibe fragmentos de datos y genera resultados intermedios. El reductor Lee los resultados intermedios y produce un resultado final.

En este ejemplo, el asignador recibe una tabla con las variables descritas por la propiedad en el almacén de datos.SelectedVariableNames Entonces, el asignador extrae los vuelos que tenían una gran cantidad de retraso después de retroceso de la puerta. En concreto, identifica los vuelos con una duración superior a 2,5 veces la duración del período programado. El asignador ignora los vuelos anteriores a la 1995, ya que algunas de las variables de interés de este ejemplo no se recopilaron antes de ese año.

Mostrar el archivo de función de mapa.

 function subsettingMapper(data, ~, intermKVStore) % Select flights from 1995 and later that had exceptionally long % elapsed flight times (including both time on the tarmac and time in  % the air).  % Copyright 2014 The MathWorks, Inc.  idx = data.Year > 1994 & (data.ActualElapsedTime - data.CRSElapsedTime)...     > 1.50 * data.CRSElapsedTime; intermVal = data(idx,:);  add(intermKVStore,'Null',intermVal);  

El reductor recibe las observaciones un subconjunto obtenidas del asignador y simplemente las conforma en una sola tabla. El reductor devuelve una clave (que es relativamente insignificante) y un valor (la tabla concatenada).

Visualice el archivo de función de reducción.

 function subsettingReducer(~, intermValList, outKVStore) % Reducer function for the SubsettingMapReduceExample   % Copyright 2014 The MathWorks, Inc.  % get all intermediate results from the list outVal = {};  while hasnext(intermValList)     outVal = [outVal; getnext(intermValList)]; end % Note that this approach assumes the concatenated intermediate values (the % subset of the whole data) fit in memory.      add(outKVStore, 'Null', outVal);  

Se utiliza para aplicar el mapa y reducir las funciones al almacén de datos,.mapreduceds

result = mapreduce(ds, @subsettingMapper, @subsettingReducer); 
******************************** *      MAPREDUCE PROGRESS      * ******************************** Map   0% Reduce   0% Map  16% Reduce   0% Map  32% Reduce   0% Map  48% Reduce   0% Map  65% Reduce   0% Map  81% Reduce   0% Map  97% Reduce   0% Map 100% Reduce   0% Map 100% Reduce 100% 

Devuelve un almacén de datos de salida, con archivos en la carpeta actual.mapreduceresult

Mostrar resultados

Busque patrones en las primeras 10 variables que se sacaron del conjunto de datos. Estas variables identifican la aerolínea, el destino y los aeropuertos de llegada, así como algunos datos básicos de demora.

r = readall(result); tbl = r.Value{1}; tbl(:,1:10) 
 ans =    37x10 table      Year    Month    DepTime    UniqueCarrier    ActualElapsedTime    CRSElapsedTime    ArrDelay    DepDelay    Origin    Dest      ____    _____    _______    _____________    _________________    ______________    ________    ________    ______    _____      1995      6       1601          'US'                162                 58            118           14      'BWI'     'PIT'     1996      6       1834          'CO'                241                 75            220           54      'IAD'     'EWR'     1997      1        730          'DL'                110                 43            137           70      'ATL'     'GSP'     1997      4       1715          'UA'                152                 57            243          148      'IND'     'ORD'     1997      9       2232          'NW'                143                 50            115           22      'DTW'     'CMH'     1997     10       1419          'CO'                196                 58            157           19      'DFW'     'IAH'     1998      3       2156          'DL'                139                 49            146           56      'TYS'     'ATL'     1998     10       1803          'NW'                291                 81            213            3      'MSP'     'ORD'     2000      5        830          'WN'                140                 55             85            0      'DAL'     'HOU'     2000      8       1630          'CO'                357                123            244           10      'EWR'     'CLT'     2002      6       1759          'US'                260                 67            192           -1      'LGA'     'BOS'     2003      3       1214          'XE'                214                 84            124           -6      'GPT'     'IAH'     2003      3        604          'XE'                175                 60            114           -1      'LFT'     'IAH'     2003      4       1556          'MQ'                142                 52            182           92      'PIA'     'ORD'     2003      5       1954          'US'                127                 48             78           -1      'RDU'     'CLT'     2003      7       1250          'FL'                261                 95            166            0      'ATL'     'IAD'     2003      8       2010          'AA'                339                115            406          182      'BHM'     'DFW'     2004      3       1238          'MQ'                184                 69            115            0      'AMA'     'DFW'     2004      7       1730          'DL'                241                 68            173            0      'DCA'     'LGA'     2004      8       1330          'XE'                204                 80            124            0      'HRL'     'IAH'     2005      7       1951          'MQ'                251                 97            345          191      'RDU'     'JFK'     2005     10        916          'MQ'                343                 77            266            0      'LIT'     'DFW'     2006      2        324          'B6'               1650                199            415        -1036      'BOS'     'FLL'     2006      5       1444          'CO'                167                 60            131           24      'IAH'     'SAT'     2006      5       1250          'DL'                148                 59            109           20      'DCA'     'LGA'     2006      7       1030          'WN'                211                 80            226           95      'PIT'     'MDW'     2006      7       1424          'MQ'                254                 69            259           74      'LGA'     'DCA'     2006     11       2147          'UA'                222                 77            160           15      'DEN'     'ICT'     2006     11       1307          'AA'                175                 60            132           17      'DFW'     'AUS'     2007     10       1141          'OO'                137                 54            107           24      'PIA'     'ORD'     2008      1       1027          'MQ'                139                 55             96           12      'MLI'     'ORD'     2008      1       2049          'MQ'                151                 60            175           84      'AZO'     'ORD'     2008      2        818          'WN'                280                 95            198           13      'MHT'     'BWI'     2008      4       1014          'CO'                151                 58             92           -1      'SAT'     'IAH'     2008      6       2000          'OH'                263                104            204           45      'JFK'     'BOS'     2008      6       1715          'AA'                271                 90            201           20      'RDU'     'LGA'     2008     11       1603          'XE'                183                 73            124           14      'BTR'     'IAH'  

Mirando el primer registro, un vuelo de los Estados Unidos salió de la puerta 14 minutos después de su hora programada de salida y llegó 118 minutos tarde. El vuelo experimentó un retraso de 104 minutos después de retroceso de la puerta, que es la diferencia entre y.ActualElapsedTimeCRSElapsedTime

Hay un registro anómala. En febrero de 2006, un vuelo de JetBlue tuvo una hora de salida de 3:24 a.m. y un tiempo de vuelo transcurrido de 1650 minutos, pero un retraso de llegada de sólo 415 minutos. Esto puede ser un error de entrada de datos.

De lo contrario, no hay patrones de corte claro en cuanto a Cuándo y Dónde ocurren estos vuelos excepcionalmente retrasados. No hay aerolínea, época del año, hora del día, o un solo Aeropuerto domina. Algunos patrones intuitivos, como O'Hare (ORD) en los meses de invierno, están sin duda presentes.

Patrones de retardo

Comenzando en 1995, los datos de rendimiento del sistema de aerolíneas comenzaron incluyendo mediciones de cuánto retraso tuvo lugar en las fases de taxi de un vuelo. Luego, en 2003, los datos también empezaron a incluir ciertas causas de retraso.

Examine estas dos variables con más detalle.

tbl(:,[1,7,8,11:end]) 
 ans =    37x8 table      Year    ArrDelay    DepDelay    TaxiIn    TaxiOut    CarrierDelay    WeatherDelay    NASDelay     ____    ________    ________    ______    _______    ____________    ____________    ________      1995      118           14         7        101          NaN             NaN           NaN        1996      220           54        12        180          NaN             NaN           NaN        1997      137           70         2         12          NaN             NaN           NaN        1997      243          148         4         38          NaN             NaN           NaN        1997      115           22         4         98          NaN             NaN           NaN        1997      157           19         6         95          NaN             NaN           NaN        1998      146           56         9         47          NaN             NaN           NaN        1998      213            3        11        205          NaN             NaN           NaN        2000       85            0         5         51          NaN             NaN           NaN        2000      244           10         4        273          NaN             NaN           NaN        2002      192           -1         6        217          NaN             NaN           NaN        2003      124           -6        13        131          NaN             NaN           NaN        2003      114           -1         8        106          NaN             NaN           NaN        2003      182           92         9        106          NaN             NaN           NaN        2003       78           -1         5         90          NaN             NaN           NaN        2003      166            0        11        170            0               0           166        2003      406          182       242         10            0               0           224        2004      115            0         6         61            0               0           115        2004      173            0         5        161            0               0           173        2004      124            0         9        102            0               0           124        2005      345          191        54        125            0               0           345        2005      266            0        13        183            0               0           266        2006      415        -1036         4         12           14               0            11        2006      131           24         7        118            0               6           107        2006      109           20         4        105           20               0            89        2006      226           95         5        130            0               0           226        2006      259           74         6        208           39               0           185        2006      160           15         3        158           15               0           145        2006      132           17         4        127            0              17           115        2007      107           24         7        100            0               0           107        2008       96           12        25         72            0               0            96        2008      175           84        12        107            0               0            91        2008      198           13         4        190            0               0           185        2008       92           -1         9         93            0               0            92        2008      204           45        12        212            0              45           159        2008      201           20         4        193            0               0           201        2008      124           14        12         93            0               0           110     

Para estos vuelos excepcionalmente retrasados, la gran mayoría del retraso se produce durante el rodaje, en la pista. Además, la causa principal del retraso es.NASDelay Las autoridades nacionales de aviación imponen retrasos en el NAS en las salidas que se dirigen a un aeropuerto que se prevé que no podrá manejar todas las llegadas programadas en el momento en que el vuelo está programado para llegar. Los programas de retardo de NAS en vigor en un momento dado se publican en https://www.fly.faa.gov/ois/.

Preferiblemente, cuando se imponen retrasos en el NAS, el embarque de la aeronave se retrasa simplemente. Tal demora se mostraría como un retraso de salida. Sin embargo, para la mayoría de los vuelos seleccionados para este ejemplo, los retrasos tuvieron lugar en gran parte después de la salida de la puerta, lo que conduce a un retraso en el taxi.

Vuelva a ejecutar MapReduce

La función de mapa anterior tenía los criterios de subconfiguración cableados en el archivo de función. Una nueva función de mapa tendría que escribirse para cualquier nueva consulta, como los vuelos que salen de San Francisco en un día determinado.

Un asignador genérico puede ser más adaptable separando los criterios de subconfiguración de la definición de la función de mapa y utilizando una función anónima para configurar el asignador para cada consulta. Este asignador genérico utiliza un cuarto argumento de entrada que suministra la variable de consulta deseada.

Mostrar el archivo de función de mapa genérico.

 function subsettingMapperGeneric(data, ~, intermKVStore, subsetter)  intermKey = 'Null';  intermVal = data(subsetter(data), :);  add(intermKVStore,intermKey,intermVal);  

Cree una función anónima que realice la misma selección de filas en las que está codificado de forma rígida.subsettingMapper.m

inFlightDelay150percent = ...    @(data) data.Year > 1994 & ...    (data.ActualElapsedTime-data.CRSElapsedTime) > 1.50*data.CRSElapsedTime; 

Puesto que la función requiere que las funciones Map y reduce acepten exactamente tres entradas, utilice otra función anónima para especificar la cuarta entrada al asignador,.mapreducesubsettingMapperGeneric.m Posteriormente, puede utilizar esta función anónima para llamar utilizando sólo tres argumentos (el cuarto es implícito).subsettingMapperGeneric.m

configuredMapper = ...     @(data, info, intermKVStore) subsettingMapperGeneric(data, info, ...     intermKVStore, inFlightDelay150percent); 

Se utiliza para aplicar la función de mapa genérico al almacén de datos de entrada.mapreduce

result2 = mapreduce(ds, configuredMapper, @subsettingReducer); 
******************************** *      MAPREDUCE PROGRESS      * ******************************** Map   0% Reduce   0% Map  16% Reduce   0% Map  32% Reduce   0% Map  48% Reduce   0% Map  65% Reduce   0% Map  81% Reduce   0% Map  97% Reduce   0% Map 100% Reduce   0% Map 100% Reduce 100% 

Devuelve un almacén de datos de salida, con archivos en la carpeta actual.mapreduceresult2

Verificar resultados

Confirme que el asignador genérico obtiene el mismo resultado que con la lógica de subconfiguración cableada.

r2 = readall(result2); tbl2 = r2.Value{1};  if isequaln(tbl, tbl2)     disp('Same results with the configurable mapper.') else     disp('Oops, back to the drawing board.') end 
Same results with the configurable mapper. 

Consulte también

|

Temas relacionados