pada postingan sebelumnya, sudah dibahas terkait map reduce sederahana menggunakan PHP. kali ini akan dibahas jika menggunakan Python.
seperti biasa, akan dibuat 2 file python , yaitu map.py, dan reduce.py untuk map.py akan menggunakan input data.csv yang akan menghasilkan intermediate.csv
sedangkan reduce.py membaca intermediate.csv dan menghasilkan result.csv
berikut map.py :
import csv
# map.py
data = []
with open('data.csv') as csv_file :
csv_reader = csv.reader(csv_file,delimiter=',')
line_count = 0
for row in csv_reader :
line_count = line_count + 1
if line_count == 1 :
continue
data.append([row[1],row[3]])
with open('intermediate.csv',mode='w') as csv_file :
csv_writer = csv.writer(csv_file,delimiter=",",quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in data :
csv_writer.writerow(row)
berikut reduce.py :
import csv
# reduce.py
jml = {}
with open('intermediate.csv') as file_csv :
csv_reader = csv.reader(file_csv,delimiter = ',')
for row in csv_reader :
#print(row);
if row[0] not in jml :
jml[row[0]] = 0
jml[row[0]] = jml[row[0]] + int(row[1])
with open('result.csv',mode='w') as file_csv :
csv_writer = csv.writer(file_csv,delimiter = ',', quotechar='"')
for row in jml.items() :
csv_writer.writerow([row[0],row[1]])
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.
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
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.