style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ejemplo MapReduce Hadoop 4

Ahora veremos la parte del reduce, el cual nos tiene que entregar el pais que tiene el numero maximo de pobladores.

En este caso sabemos ya que el map del anterior post manda a llamar al reduce por cada region existente, por lo que unicamente tenemos ahora que ubicar el pais que tiene la mayor poblacion.

El codigo es muy pequeño asi que no es necesario partirlo para explicarlo.

package mx.com.sinapsis.ds.test.ComparaPais;

import java.io.IOException;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class MaximaPoblacionReducer extends
                Reducer<Text, Text, Text, Text> {
       
        protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException{
                Long maxValue = Long.MIN_VALUE;
                String pais = "";
                //se obtiene el pais que tenga la mayor poblacion
                for(@SuppressWarnings("unused") Text value : values){
                        String[] valores = value.toString().split(":");                
                        if(!valores[0].equals("World")){                               
                                Long bMaxValue = Math.max(maxValue, Long.valueOf(valores[1]));
                                //Si es maximo que el anterior se guarda el pais que corresponde
                                if(bMaxValue > maxValue){
                                        maxValue = bMaxValue;
                                        pais = valores[0];
                        }                      
                }                      
                }
                        context.write(new Text("Region: " + key + ",") , new Text(" Pais maxima poblacion: " + pais + "," + " Poblacion: " + maxValue.toString()));            
        }

}

El reduce recibe dos pares uno con la region y otro con el nombre del pais concatenado con su poblacion.
en esta parte se separan para aplicar el algoritmo de maxima poblacion

String[] valores = value.toString().split(":");

Se graba en el context los resultados:

context.write(new Text("Region: " + key + ",") , new Text(" Pais maxima poblacion: " + pais + "," + " Poblacion: " + maxValue.toString()));

esta es la salida del archivo de hadoop part-r-00000

Region: Africa, Pais maxima poblacion: Nigeria, Poblacion: 101232251
Region: Arctic Region, Pais maxima poblacion: Iceland, Poblacion: 265998
Region: Asia, Pais maxima poblacion: China, Poblacion: 1203097268
Region: Central America and the Caribbean, Pais maxima poblacion: Guatemala, Poblacion: 10998602
Region: Commonwealth of Independent States - Central Asian, Pais maxima poblacion: Uzbekistan, Poblacion: 23089261
Region: Commonwealth of Independent States - European States, Pais maxima poblacion: Ukraine, Poblacion: 51867828
Region: Ethnic Groups in Eastern Europe, Europe, Pais maxima poblacion: Poland, Poblacion: 38792442
Region: Europe, Pais maxima poblacion: Germany, Poblacion: 81337541
Region: Middle East, Pais maxima poblacion: Iran, Poblacion: 64625455
Region: North America, Pais maxima poblacion: United States, Poblacion: 263814032
Region: Oceania, Pais maxima poblacion: Australia, Poblacion: 18322231
Region: South America, Pais maxima poblacion: Brazil, Poblacion: 160737489
Region: Southeast Asia, Pais maxima poblacion: Indonesia, Poblacion: 203583886

Como ven esta tecnologia es bastante sorprendente y las posibilidades son infinitas.
Yo en estos momentos me encuentro admirado con los avances en genomica y las posibilidades que ofrece hadoop y mapreduce
en esta area llamada BioInformatica.

Asi que a aprender el lenguaje de la genomica, saber como secuenciar las cadenas de ADN, invertirlas para obtener el RNA y como genera este las proteinas

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">