zoukankan      html  css  js  c++  java
  • 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() //关闭数据库连接
        * })
        * 复制代码
        */
    }
  • 相关阅读:
    SQL优化
    Mybatis
    Spring MVC(总结二)
    ES多机集群配置
    ES索引,分片,一致性
    ElasticSearch关于索引库的命令操作
    试题01(一)
    Linux安装配置elastic search
    Windows安装配置elastic search
    SpringBoot(二)
  • 原文地址:https://www.cnblogs.com/wangshuang123/p/11058950.html
Copyright © 2011-2022 走看看