Map Reduce menjadi salah satu model pemrograman yang berfokus pada pengolahan data pada lingkungan BigData. Biasanya bahasa pemrograman yang dipakai untuk memproses adalah bahasa pemrograman kelas berat seperti Java. Namun, bukan berarti kita yang suka PHP gak bisa main – main juga. ya tetap bisa saja.
Kalau kita lihat dari paper yang dipublish google tentang map- reduce programming model. Banyak hal yang dibahas di paper itu, namun kita coba untuk membahas 2 hal saja yang menurut saya esensial dalam model pemrogramannya. Yaitu (1) map phase dan (2) Reduce phase. Untuk yang lainnya mungkin akan kita coba utak atik di post lain.
untuk ujicoba nya mungkin kita perlu dataset ya. Dataset yang akan digunakan adalah dataset tentang populasi dari banyak negara dan lintas tahun.
dari data , dapat dilihat memiliki 4 kolom
- Kolom 0 : Entity : nama negara – negara
- Kolom 1 : Code : Kode dari negara
- Kolom 2 : Year : Tahun
- Kolom 3 : Population : populasi di negara tersebut pada tahun tersebut
nah, jika kita ingin membuat laporan dari file csv ini yang menghasilkan laporan berupa nama_negara, rata-rata populasi.
dengan mengasumsikan setiap baris adalah unik, maka rata-rata populasi dapat dihitung dengan jumlah populasi / jumlah baris , dimana dihitung per negara.
untuk ini kita dapat membuat 2 file di PHP untuk mapper dan reduce nya.
<?php
if(count($argv) != 2)
{
echo "php mp-mapper.php <nama file>".PHP_EOL;
exit(1);
}
$file = $argv[1];
$out = fopen("php://output","w");
$fp = fopen($file,"r");
while(($data = fgetcsv($fp)) !== FALSE)
{
$data_out = array(
$data[0],
$data[3]
);
fputcsv($out,$data_out);
}
fclose($fp);
fclose($out);
file mp-mapper.php ini mengambil 1 parameter yaitu nama file. Lalu, akan melakukan projection terkait kolom yang akan digunakan. dimana kolom yang akan digunakan adalah kolom ke 0 dan 3.
untuk melihat perbedaan dari data nya, dapat kita visualkan seperti gambar dibawah
gambar berikut terkait cuplikan data yang digunakan, terlihat ada 4 kolom.
coba bandingkan dengan setelah program mp-reduce.php dijalankan
setelah mp-reduce dijalankan dan hasilnya disimpan ke dalam sebuah file
php mp-mapper.php population-and-demography.csv > test-mapper.csv
maka file tersebut bisa juga dibuat sebagai file input untuk proses reduce
<?php
if(count($argv) != 2)
{
echo "php mp-reducer.php <nama file>".PHP_EOL;
exit(1);
}
$file = $argv[1];
$count = array();
$sum = array();
$fp = fopen($file,"r");
$out = fopen("php://output","w");
while(($data = fgetcsv($fp)) !== FALSE)
{
$country = $data[0];
if(!isset($count[$country]))
{
$count[$country] = 0;
$sum[$country] = 0;
}
$count[$country] = $count[$country] + 1;
$sum[$country] = $sum[$country] + floatval($data[1]);
}
$list_country = array_keys($count);
foreach($list_country as $country)
{
$avg = (float)$sum[$country] / $count[$country];
fputcsv($out,array($country,$avg));
}
fclose($fp);
fclose($out);
lalu reducer ini dapat dipanggil seperti
php mp-reducer.php test-mapper.csv
maka akan menjadi
dengan ini kita sudah bisa memprogram map reduce dengan PHP
tentu ini belum optimal dan belum menjawab banyak hal seperti bagaimana model terdistribusinya, fault tolerance dll. Namun ini bisa jadi dasar untuk membahas hal – hal tersebut.