1.Spark 的广播传播
1.1实现原理
1.广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。
2.比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。
3.在多个并行操作中使用同一个变量,但是 Spark会为每个任务分别发送
package com.wudl.core
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.{SparkConf, SparkContext}
import scala.collection.mutable
/**
*
* @author wudl
* @create 2021/6/17 17:51
* @description
*/
object BroadcastRDD {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[1]").setAppName("BroadcaseRdd")
val sc = new SparkContext(sparkConf)
val dataRdd = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3), ("d", 4)), 4)
val list = List(("a", 4), ("b", 5), ("c", 6), ("d", 7))
// 声明广播变量
val broadcast: Broadcast[List[(String, Int)]] = sc.broadcast(list)
val result = dataRdd.map {
case (key, num) => {
var numb2 = 0
// 使用广播变量
for ((k, v) <- broadcast.value) {
if (k == key) {
numb2 = v
}
}
(key, (num, numb2))
}
}
result.foreach(println)
sc.stop()
}
}
网友评论