1.mapPartitions效率比map高
- Map(function)的function是针对RDD的所有元素进行操作,有多少个元素就会执行多少次
- MapPartition(function)的function是RDD的分区进行操作,有多少个分区就会执行多少次,独立在每个分区上运行,所以mapPartitions效率比map高的多。
-
假设有N个元素,有M个分区,那么map的函数的将被调用N次,而mapPartitions被调用M次,一个函数一次处理所有分区。
2.mapPartitions function不能重复执行
- mapPartitions()每次处理一个分区的数据,这个分区的数据处理完后,原 RDD 中该分区的数据才能释放,可能导致 OOM。
- mapPartitions 数据存在Iterator迭代器中,Iterator<T> => Iterator<U>,同java的Iterator一样,只能遍历使用一次。
- SparkSql默认会开启mapPartition的优化
总结:当内存空间较大的时候建议使用mapPartitions()。