资讯详情

Spark中map、mappartition、foreach 以及 foreachpartition的区别和对比

一、map 操作 V.S. mappartition 操作

  • 对 RDD 中的操作(可以理解为遍历),例如使用一个function则需要,其中 n 为元素数;
  • 对 RDD 中 的 iterator 例如,使用一个操作 function 则(一个partition所有元素一次传递给这个元素 function);

因此,有以下结论:

  1. 执行 1 次 function 只处理 1 例如,个元素(或数据) partition 中间有很多元素,目前已经处理过了 1000 当内存不足时,个元素,Spark 可以通过GC等待方法(如处理过的) 1000 从内存中回收个元素)。因此,通常 map 不会导致操作OOM的异常;
  2. 执行 1 次 function 需要接收该 partition 所有元素,所以处理内存不足
  3. 一般而言,mappartition 性能较高;等操作,这是因为:
    • 假设需要对 RDD 加密计算中的每个元素,加密前需要每个元素 executor 中执行 initialization 操作,想象一下,如果是的话 initialization 放在 map 执行将导致;但如果放在里面 mappartition 中则只需要每个 executor 中执行 1 次即可;
    • 假设需要将 RDD 数据库中的每个元素都应该写入这个时候,访问数据库操作本身就是一项耗时的任务。如果将此操作放置在中 map 执行将非常耗时,并影响数据库的稳定性。

二、foreach 操作 V.S. foreachpartition 操作

map 和 foreach 区别在于:

  • 前者是 transformation 操作(不会立即执行),后者是 action 操作(会立即执行);
  • 前者的返回值是新的 RDD,后者没有返回值。

其他的和 map V.S. mappartition 类似。

Scala有所有的集合对象foreach和map两种方法。这两种方法的共同点是,它们都被用来收集遍历对象,并执行指定的方法。两者的区别在于:foreach无返回值(准确地说,返回void),map结论是:foreach 无法代替map. 而map但是方法替代foreach。

问题:为什么scala提供foreach和map两种方法呢?本人看法是scala作为一种支持函数编程范式的语言,必须引入一种机制来支持数学中的函数概念,而函数是数学中的映射scala中有map方法一点也不奇怪。而foreach只用于无需映射集合的操作,但只有在遍历集合时才能使用。总而言之,foreach用于遍历集合map用于映射(转换)集合到另一集

作者:alexlee666 链接:https://www.jianshu.com/p/0f2d47bd820d 来源:简书 作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签: 820d型温度传感器温度探头

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司