大数据全系列 教程
1869个小节阅读:467.8k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
未使用广播变量时存在的问题,多个并行操作中使用同一个变量,但是 Spark会为每个任务分别发送。如下图4个并行度,2个Executor。
广播变量用来高效分发较大的对象(不能过大)。向所有工作节点分别发送一个较大的只读值,以供一个或多个Spark操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。
代码演示:
xxxxxxxxxx
package com.itbaizhan.core
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object CoreBroadcast {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[*]").setAppName("Broadcast")
val sc = new SparkContext(conf)
//1.定义一个本地的集合变量
val localList = List("张三", "李四", "王五")
//2.将本地集合变量定义为一个广播变量
val broadcast: Broadcast[List[String]] = sc.broadcast(localList)
//3.创建RDD对象
val rddName: RDD[String] = sc.parallelize(List("张三", "关羽", "赵云", "李四", "张三", "刘备", "张飞", "王五"))
//4.自定义一个函数
def filterFunc(name: String): Boolean = {
//5.在使用本地集合变量的地方,从广播变量中取出
val blackNames: List[String] = broadcast.value
//6.判断当前的name是否在blackNames中出现
if(blackNames.contains(name)){
return false//黑名单中出现则过滤掉
}else{
return true//未出现则保留
}
}
val resultRdd: RDD[String] = rddName.filter(filterFunc)
println(resultRdd.collect().mkString(","))
sc.stop()
}
}
实时效果反馈
1. 关于Spark广播变量的相关描述,正确的是:
A 未使用广播变量时存在的问题,多个并行操作中使用同一个变量,但是 Spark会为每个任务分别发送。
B 广播变量比普通本地变量的分发效率高。
C 向每个Executor节点分别仅仅发送一个广播变量的只读值,以供一个或多个Spark操作使用。
D 以上三个选项都正确。
答案:
1=>D。