spark map和mapPartitions的区别

package dayo1

import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.mutable.ArrayBuffer

object MapAndPartitions {
  def main(args: Array[String]): Unit = {
    val cof = new SparkConf ().setAppName ( this.getClass.getSimpleName ).setMaster ( "local[*]" )
    val sc = new SparkContext ( cof )

    //创建RDD(并列化方法)
    val arrayRDD = sc.parallelize ( Array ( 1, 2, 3, 4, 5, 6, 7, 8, 9 ) )

    //map数据每次处理一行数据
    arrayRDD.map ( elements => elements ).foreach ( println )

    arrayRDD.mapPartitions(tp=>{
      val result=new ArrayBuffer[Int]()
      tp.foreach(tp=>{
        result+=tp
      })
      result.iterator
    }
    ).foreach(println)

    sc.stop ()
  }

  /**
    * 两个函数最终处理得到的结果是一样的
    *
    * mapPartitions比较适合需要分批处理数据的情况,比如将数据插入某个表,每批数据只需要开启一次数据库连接,大大减少了连接开支,伪代码如下:
    *
    * 复制代码
    *     arrayRDD.mapPartitions(datas=>{
    * dbConnect = getDbConnect() //获取数据库连接
    *       datas.foreach(data=>{
    *         dbConnect.insert(data) //循环插入数据
    * })
    *       dbConnect.commit() //提交数据库事务
    *       dbConnect.close() //关闭数据库连接
    * })
    * 复制代码
    */
}
原文地址:https://www.cnblogs.com/wangshuang123/p/11058950.html