spark广播变量

spark广播变量

广播变量的宽泛理解:
例如就像你有10个汉字不知道念什么,你需要查字典,来一个汉字查一次字典写出拼音,最终10个汉字和拼音查询完毕,输出运行结果程序结束,但是如果说只给你半本字典呢?就会存在有的汉字用这半本字典查不到的风险.从而导致数据异常,所以就出现了广播变量这项技术,将所有的部分字典整合成一个完整的字典进行查询,从而保证数据的正常输出.
再简单点理解就是有5个executor,每个executor给Driver1块钱,然后Driver给executor每人5块钱!
结合代码理解:
大量数据一般都会存在hdfs上,hdfs是一个分布式存储系统,会将文件分为几部分存储,当你要用它的时候可能executer端只有某一台机器给你提供的部分的数据,所以我们要将他整合起来,主要分三步.

第一步:(分布的数据).collect收集到Driver端成整体,

//整理ip规则数据
val ipdic: RDD[(Long, Long, String, String)] = ipdict.map(line => {
  val fields: Array[String] = line.split("[|]")
  val startnum: Long = fields(2).toLong
  val endnum: Long = fields(3).toLong
  val province = fields(6)
  var city = fields(7)
  (startnum, endnum, province, city)
})
//触发Action,只要你将数据一收集数据就会自动动driver端!!将数据收集到Driver端
val tupipddic: Array[(Long, Long, String, String)] = ipdic.collect().

第二步:sc.broadcast(刚手机到Drive端的数据)broadcast广播.传入一个参数()

//然后再广播,广播也是有广播域的就是你刚刚收集到driver端的数据!他会将driver的数据发送给各个ececutor端,发不完不会停止
val broadcastdic: Broadcast[Array[(Long, Long, String, String)]] = sc.broadcast(tupipddic)

第三步:然后再broadcast.value获取广播好的整体数据

  //关联规则在executor端执行,是通过广播返回到Driver端的引用,获取完整的ip字典
      val valu: Array[(Long, Long, String, String)] = broadcastdic.value

第四步:然后级就可以将整合好的数据拿来运算喽!

发布了48 篇原创文章 · 获赞 11 · 访问量 1511

猜你喜欢

转载自blog.csdn.net/weixin_45896475/article/details/104382849