does spark uses mapreduce