Inicio > PHP > Mapreduce en php

MAPREDUCE EN PHP

01/01/2018PHP

 

Hace unos meses hice un curso por internet sobre la introducción a big data y la verdad es que me pareció interesante y escribí sobre hadoop y MapReduce y ahora he creado un ejemplo de mapreduce en php bastante sencillo que me ha servido para entender y espero que os sirva a vosotros:

$puntuacion = [
          [ 'name' => 'Pablo', 'date' => '2017-01-01', 'points' => 3]
        , [ 'name' => 'Ángel', 'date' => '2017-01-01', 'points' => 2]
        , [ 'name' => 'María', 'date' => '2017-01-01', 'points' => 4]
        ,[ 'name' => 'Pablo', 'date' => '2017-01-01', 'points' => 8]
        , [ 'name' => 'Ángel', 'date' => '2017-01-01', 'points' => 12]
        , [ 'name' => 'María', 'date' => '2017-01-01', 'points' => 6]
        ,[ 'name' => 'Pablo', 'date' => '2017-02-01', 'points' => 20]
        , [ 'name' => 'Ángel', 'date' => '2017-02-01', 'points' => 15]
        , [ 'name' => 'María', 'date' => '2017-02-01', 'points' => 18]
        ,[ 'name' => 'Pablo', 'date' => '2017-03-01', 'points' => 13]
        , [ 'name' => 'Ángel', 'date' => '2017-03-01', 'points' => 20]
        , [ 'name' => 'María', 'date' => '2017-03-01', 'points' => 18]
];

        //función map y filter
        function map($arr,$indice_principal,$indice){

                $arr_map = array();
                $total = count($arr);
                for($i=0;$i<$total;$i++)
                {
                        $arr_map[$i][$indice_principal] = $arr[$i][$indice_principal];
                        $arr_map[$i][$indice] = $arr[$i][$indice];
                }
                return $arr_map;
        }
        
        //realiza el reduce para calcular el resultado final    
        function reduce($arr_map,$indice_principal,$indice)
        {
                $resultado = 0;
                $arr_reduce = array();
                $total = count($arr_map);
                for($i=0;$i<$total;$i++)
                {
                        if (!array_key_exists($arr_map[$i][$indice_principal],$arr_reduce))
                        {
                                $arr_reduce[$arr_map[$i][$indice_principal]] = 0;
                        }
                        else
                        {
                                $arr_reduce[$arr_map[$i][$indice_principal]] += $arr_map[$i][$indice];
                        }
                        
                }

            return $arr_reduce;
        }
///echo '
';var_dump($puntuacion);
$map = map($puntuacion,'name','points');
echo '
';var_dump($map);
$reduce = reduce($map,'name','points');
echo '
';var_dump($reduce);


Sñe que tendría que haber usado clases y que el código fuese más elegante pero lo que he querido es que fuese sencillo de leer y entender.