Spark--共享变量Broadcast

本文介绍了Spark中的广播变量和数组广播原理,展示了如何在driver端定义并广播常量和数组,以及在executor端如何处理广播后的值变化。通过实例演示了广播在rdd计算中的应用,以及其在实际项目中的重要性。
摘要由CSDN通过智能技术生成

Broadcast

功能:broadcast 就是将数据从一个节点发送到其他各个节点上去

广播变量

原理:

  • 常量定义在driver端,广播的数值
  • rdd算子的计算在executor端,常量值广播之后再修改值,rdd的计算用的还是修改之前的值
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("broadcastDemo")
    val sc: SparkContext = SparkContext.getOrCreate(conf)
    var value=20  //定义广播变量
    val broadcastValue: Broadcast[Int] = sc.broadcast(value) //将变量广播出去
    value=40  //修改变量的值
    val rdd: RDD[(Int, String)] = sc.parallelize(Array((1,"a"),(2,"b"),(3,"c"))) //定义一个rdd
    val rdd1: RDD[(Int, Int)] = rdd.mapValues(x => {
      println("value is :" + x)  //打印rdd的value
      broadcastValue.value  //返回广播变量的value
    })
    rdd1.collect().foreach(println)  //打印rdd1,看value的值是否变为40
value is :c
value is :a
value is :b
(1,20)
(2,20)
(3,20)

广播数组

原理:

  • 在driver端定义数组,广播的是地址值
  • 在driver端修改数组元素后,在executor端对rdd算子进行操作使用数组时,使用的是修改后的值
val conf:SparkConf=new SparkConf().setMaster("local[*]").setAppName("BroadcastDemo")
val sc:SparkContext=SparkContext.getOrCreate(conf)
var arr=Array("hello","hi")
println(arr)//打印的是地址值
val broadcastVar=sc.broadcast(arr)//将数组广播出去
arr(0)="haha" //在广播之后修改数组的值
val rdd=sc.parallelize(Array((1,"leader"),(2,"teacher"),(3,"student")))
val rdd1=rdd.mapValues(x=>{
println("value is :"+x)  //打印rdd的value的值
broadcastVar.value(0)  //返回广播下标为0的value
})
rdd1.collect.foreach(println) 
[Ljava.lang.String;@4816c290
value is :teacher
value is :student
value is :leader
(1,haha)
(2,haha)
(3,haha)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值