Spark-累加器

Spark-累加器

Spark-累加器_第1张图片

第一张图和java中的引用传递,和值传递很像
你能改变内容,内存地址无法改变.
你传你的,我传我的,没有把值给返回去
双端对列   当发送错误的时候要放回到要来头部

对列一般是先进先出, 要是发送错误,放回到尾部顺序就错了

所以叫累加器不是很准确,叫采集器

Spark-累加器_第2张图片

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.spark.rdd.RDD
import org.apache.spark.util.{AccumulatorV2, LongAccumulator}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 累加器
  */
object Spark07_Add{
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Application")

    //构建Spark上下文对象
    val sc = new SparkContext(conf)

    //使用累加器实现功能
    val sum: LongAccumulator = sc.longAccumulator("sum")

//    var sum = 0;
    val rdd: RDD[Int] = sc.makeRDD(Array(1,2,3,4,5))

    rdd.map(item=>{
      //sum+=item
      sum.add(item)
    }).collect()

    println("sum = " + sum.value)
    // 释放资源
    sc.stop()
  }
}

广播变量

广播变量会放到内存中
so广播变量(调优策略),不用广播变量用join也能做
不能把很大的变量放过去,会占用我的资源

Spark-累加器_第3张图片

RDD缓存

即使数据宕了,我数据依然能够拿回来
缓存在重要的一些数据缓存起来
缓存   内存   内存里面保存数据不安全,所以把文件放到CheckPoint中
RDD通过persist方法或cache方法将前面的计算结果缓存,但并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用

你可能感兴趣的:(大数据)