Spark中Map与MapPartition和的详细区别

1.mapPartitions效率比map高

  1. Map(function)的function是针对RDD的所有元素进行操作,有多少个元素就会执行多少次
  2. MapPartition(function)的function是RDD的分区进行操作,有多少个分区就会执行多少次,独立在每个分区上运行,所以mapPartitions效率比map高的多。
  3. 假设有N个元素,有M个分区,那么map的函数的将被调用N次,而mapPartitions被调用M次,一个函数一次处理所有分区。

2.mapPartitions function不能重复执行

  1. mapPartitions()每次处理一个分区的数据,这个分区的数据处理完后,原 RDD 中该分区的数据才能释放,可能导致 OOM。
  2. mapPartitions 数据存在Iterator迭代器中,Iterator<T> => Iterator<U>,同java的Iterator一样,只能遍历使用一次。
  3. SparkSql默认会开启mapPartition的优化

总结:当内存空间较大的时候建议使用mapPartitions()。

posted @ 2020-12-31 22:32  曲水修竹  阅读(1410)  评论(0编辑  收藏  举报