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.