add mapreduce function