Spark广播变量实现原理及基础编程
Posted 学亮编程手记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark广播变量实现原理及基础编程相关的知识,希望对你有一定的参考价值。
Spark广播变量实现原理及基础编程
实现原理
广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。在多个并行操作中使用同一个变量,但是 Spark 会为每个任务分别发送。
基础编程
pom
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spark.version>3.1.1</spark.version>
<spark.scala.version>2.12</spark.scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${spark.scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
代码
package com.zxl.spark.core
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object BroadcastDemo {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[4]").setAppName("BroadcastDemo")
val sc: SparkContext = new SparkContext(conf)
val rdd: RDD[(String, Int)] = sc.makeRDD(List( ("a",1), ("b", 2), ("c", 3), ("d", 4) ),4)
val list: List[(String, Int)] = List(("a", 4), ("b", 5), ("c", 6), ("d", 7))
val broadcast: Broadcast[List[(String, Int)]] = sc.broadcast(list)
//这里使用到的是偏函数
rdd.map{
case (key,num)=>{
var num2=0
for ((k,v) <- broadcast.value) {
if (k==key){
num2=v
}
}
(key,(num,num2))
}
}.collect().foreach(println)
}
}
运行结果
(a,(1,4))
(b,(2,5))
(c,(3,6))
(d,(4,7))
以上是关于Spark广播变量实现原理及基础编程的主要内容,如果未能解决你的问题,请参考以下文章