Apache Spark: map vs mapPartitions?

¿Cuál es la diferencia entre unaRDD's map ymapPartitions ¿método? Y lo haceflatMap comportarse comomap o comomapPartitions? Gracias.

(Editar) es decir, cuál es la diferencia (ya sea semánticamente o en términos de ejecución) entre

  def map[A, B](rdd: RDD[A], fn: (A => B))
               (implicit a: Manifest[A], b: Manifest[B]): RDD[B] = {
    rdd.mapPartitions({ iter: Iterator[A] => for (i <- iter) yield fn(i) },
      preservesPartitioning = true)
  }

Y:

  def map[A, B](rdd: RDD[A], fn: (A => B))
               (implicit a: Manifest[A], b: Manifest[B]): RDD[B] = {
    rdd.map(fn)
  }

Respuestas a la pregunta(3)

Su respuesta a la pregunta