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() //关闭数据库连接
* })
* 复制代码
*/
}