Spark中map和mapPartitions的区别?

Spark中map和mapPartitions的区别?

[TOC]

相同点

  • 二者都是 转换(Transformation)算子

区别

  • 本质
    • map是对 RDD 中的每一个元素进行操作
    • mapPartitions 则是对 RDD 中的每个分区的迭代器进行操作
  • RDD中的每个分区数据量不大的情况
    • map 操作性能低下。eg:一个partition中有1万条数据,那么在分析每个分区时,function要执行和计算1万次
    • mapPartitions性能较高。eg:使用 mapPartitions操作之后,一个 task 仅仅会执行一次function,function 一次接受所有的 Partition 数据。只要执行一次就 OK 了,比较高。
  • RDD 中的每个分区数据量超大的情况
    • map都能正常执行结束
    • mapPartitions 一次传入一个 function 后,可能一下内存不够用,造成 OOM(内存溢出)