Spark补充

1.累加器

1.产生背景
    问题:统计此次执行过程中map执行的次数
    
    //创建程序入口
    val conf = new SparkConf()
      .setAppName("Demo2")
      .setMaster("local[2]")
    val sc = new SparkContext(conf)
    //生成RDD对象
    val RDD = sc.makeRDD(1 to 10)
    //编写逻辑
    val value = RDD.map(x => x + 1)
    value.foreach(println)

观察上面的代码,我们不难发现对1到10每个数字进行加一操作,总共执行了十次。但是由于多核心多线程的因素,每个RDD任务会放到不同的机器上,开启不同的线程来完成它,因此我们这里无法直接拿到这个次数10,因而就产生了累加器。

2.累加器的使用步骤
    //1.创建累加器
    val acc = new LongAccumulator
    //2.使用sc注册计数器
    sc.register(acc)
    //3.在转换算子中使用累加器
    acc.add(1)
    //4.RDD任务执行结束以后,访问累加器的值
    println(acc.value)
3.累加器的原理
    class myAcc extends AccumulatorV2[Long, Long] {

      var count: Long = 0L

      /**
       * 判断当前累加器是否为初始值
       *
       * @return
       */
      override def isZero: Boolean = this.count == 0

      /**
       * 复制当前累加器的状态
       *
       * @return
       */
      override def copy(): AccumulatorV2[Long, Long] = {
        val acc = new myAcc
        acc.count = this.count
        acc
      }

      /**
       * 重置当前累加器的值
       */
      override def reset(): Unit = this.count = 0L

      /**
       * 为累加器添加输入值
       *
       * @param v
       */
      override def add(v: Long): Unit = this.count += v

      /**
       * 将另一个累加器的值合并到当前累加器
       *
       * @param other
       */
      override def merge(other: AccumulatorV2[Long, Long]): Unit = {
        this.count += other.value
      }

      /**
       * 取出累加器中保存的值
       *
       * @return
       */
      override def value: Long = this.count
    }

2.广播变量

1.产生背景

例如有些数据校验文件在运行过程中需要对每个数据进行校验,如果在每一个线程中都保存一份资源文件,那么就显得极为浪费资源,倘若检验文件过大,就无法完成正常的程序。因此需要一个公共区域来保存这些资源文件,每个线程只要访问公共区域的资源文件就可以解决上述问题。

2.创建及其使用
    //1.使用sc创建广播变量
    val ss = sc.broadcast(公共资源)
    //2.从广播变量中取出
    val value1 = ss.value
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark扩展是指在Apache Spark框架上进行功能补充和扩展的一种机制。通过Spark扩展,我们可以增强Spark的功能,实现更多的数据处理和分析需求。 首先,Spark扩展可以为Spark添加新的数据源和数据格式支持。Spark原生支持多种数据源,如HDFS、Hive、JDBC和Amazon S3等,但有时还需要对其他数据源进行处理,比如NoSQL数据库或实时流数据等。通过Spark扩展,可以实现对这些数据源的连接和读取,方便用户进行数据分析。 其次,Spark扩展还可以为Spark添加新的算法和函数库支持。Spark已经提供了很多常用的算法和函数库,比如机器学习库MLlib和图处理库GraphX等。但是,对于特定的应用场景和业务需求,可能需要自定义的算法和函数。通过Spark扩展,可以增加这些自定义算法和函数的支持,以满足用户的特定需求。 此外,Spark扩展还可以帮助优化Spark的性能和可扩展性。虽然Spark已经在分布式计算方面进行了优化,但是对于大规模数据处理和高并发访问的场景,仍然可能存在性能瓶颈。通过Spark扩展,可以针对特定的性能问题进行优化,提升Spark的处理效率和速度。 总之,Spark扩展是对Apache Spark功能的延伸和增强,使其可以满足更广泛的数据处理和分析需求。通过添加新的数据源和算法支持,以及优化Spark的性能,Spark扩展提供了更灵活和强大的工具,使用户能够更好地利用Spark进行大数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值