Client-side MapReduce