broadCast、cache、checkpoint、累加器

broadCast

def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local[*]").setAppName(this.getClass.getName)
    val sc = new SparkContext(conf)
    sc.setLogLevel("WARN")

    //
    val set = Set("hello")
    val broadcast: Broadcast[Set[String]] = sc.broadcast(set)

    val rdd1: RDD[String] = sc.textFile("hdfs://hadoop10:9000/a.txt")
  rdd1.flatMap(_.split(" ")).filter(v => {
    //通过广播变量获取set集合
    broadcast.value.contains(v)
  }).collect().foreach(println)

  }

cache

def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local[*]").setAppName(this.getClass.getName)
    val sc = new SparkContext(conf)
    sc.setLogLevel("WARN")

    //cache 缓存机制,可以将前面的计算结果缓存,当rdd的计算结果再此被调用时,可以直接从缓存中获取,不必重复计算,提升效率
    //val rdd1: RDD[String] = sc.makeRDD(List("张三")).map(_ + System.currentTimeMillis())  //输出结果不一样
    val rdd1: RDD[String] = sc.makeRDD(List("张三")).map(_ + System.currentTimeMillis()).persist() //输出结果一样,说明存在缓存机制
      rdd1.foreach(println)
      rdd1.foreach(println)
  }

checkpoint

object checkPoint {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local[*]").setAppName(this.getClass.getName)
    val sc = new SparkContext(conf)
    sc.setLogLevel("WARN")

    //
    sc.setCheckpointDir("hdfs://hadoop10:9000/rdd-checkpoint")
    val rdd1: RDD[String] = sc.makeRDD(List("张三")).map(_ + System.currentTimeMillis())
    rdd1.checkpoint() //
    rdd1.foreach(println)
    rdd1.foreach(println)
    rdd1.foreach(println)
  }
}

累加器

object accumulators {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local[*]").setAppName(this.getClass.getName)
  val sc = new SparkContext(conf)
  sc.setLogLevel("WARN")

    //实时累加,executer端对对分区内数据做累加,然后将数据拉取到Driver端做分区间累加
    var count = sc.longAccumulator("c1")
     sc.makeRDD(1 to 5).foreach(v => count.add(v))
    sc.makeRDD(1 to 6).foreach(v => count.add(v))
    println(count)
    sc.stop()
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值