在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
累加器和广播变量分别在什么场景使用?累加器分布式共享只写变量,如果在转换算子中调用累加器后续没有行动算子,累加器不会执行。后续如果调用了两次行动算子,会执行两次累加器出现多加的情况。
1、广播变量的使用方法介绍
解决的场景:

将Driver进程的共享数据发送给所有子节点Executor进程的每个任务中。如果不用广播变量技术,那么Driver端默认会将共享数据分发到每个【Task】中,造成网络分发压力大。
如果使用了广播变量技术,则Driver端将共享数据只会发送到每【Executor】一份。Executor中的所有【Task】都复用这个对象。要保证该共享对象是可【序列化】的。因为跨节点传输的数据都要是可序列化的。
在Driver端将共享对象广播到每个Executor:
val bc = sc.broadcast( 共享对象 )
在Executor中获取:
bc.value
2、累加器的使用方法介绍
集群中所有Executor对同一个变量进行累计操作。Spark目前只支持累【加】操作。有3种内置的累加器:【LongAccumulator】、【DoubleAccumulator】、【CollectionAccumulator】。
整数累加器使用方法
在Driver端定义整数累加器,赋初始值。
acc=sc.accumulator(0)
在Executor端每次累加1
acc+=1
或者acc.add(1)


3、综合案例
# -*- coding:utf-8 -*-
# Desc:This is Code Desc
from pyspark import SparkConf, SparkContext
import os
os.environ['SPARK_HOME'] = '/export/server/spark'
PYSPARK_PYTHON = "/root/anaconda3/bin/python3.8"
# 当存在多个版本时,不指定很可能会导致出错
os.environ["PYSPARK_PYTHON"] = PYSPARK_PYTHON
os.environ["PYSPARK_DRIVER_PYTHON"] = PYSPARK_PYTHON
if __name__ == '__main__':
#需求1:从大量用户中,剔除掉黑名单用户
conf=SparkConf().setAppName('sharevalue_review')\
.setMaster('local[*]')
sc=SparkContext(conf=conf)
sc.setLogLevel('WARN')
#创建大量用户
rdd_all=sc.parallelize(['zs','ls','ww','zl'])
#创建黑名单用户
black_list=['zs','ls']
#定义广播变量
bc=sc.broadcast(black_list)
#从大量用户中剔除掉黑名单用户
def filter_black(str):
#获取广播变量
black_list2=bc.value
if str in black_list2:
return False
else:
return True
filterd_rdd=rdd_all.filter(filter_black)
print('过滤后:')
print(filterd_rdd.collect())
#需求2:从大量数字中,挑选出带有7的数字,并计算他们的平均值。
#定义大量数字
rdd_all2=sc.parallelize(range(1,1001))
#定义累加器
#定义累加器1 ,记录有多少个7
acc = sc.accumulator(0)
#定义累加器2 ,将带有7的数字加起来
acc2=sc.accumulator(0)
def find7(i):
global acc
global acc2
if '7' in str(i):
acc+=1
acc2+=i
rdd2=rdd_all2.map(find7)
rdd2.count()
num_7=acc.value
sum_7=acc2.value
avg_7=sum_7/num_7
print('带有7数字的个数是',num_7,'他们的平均数是',avg_7)
小伙伴们一定要自己亲手敲代码进行练习,以上代码不仅练习了累加器和广播变量如何使用,还涉及了函数式编程(Map、Filter)如何使用,上下文变量如何创建、如何用并行化集合的方式创建RDD等,这些练习比较综合,希望可以帮助大家学到更多的技能。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
大数据与人工智能对保险行业的风险控制与挑战
大数据与人工智能对保险行业的风险控制与挑战,万物互联、大数据与人工智能是改变根本的技术革命。它在很大程度上解决了困扰人类几千年的信息不充分、不对称的问题,极大地提高了人类整合资源、协调行动、科学决策的能力,必将引发一场空前的社会大变革。
10759
2019-04-11 14:11:31
怎样学习spark
现在一提到云计算大数据,就会想到spark。要怎样学习spark呢?首先我们需要简单了解一下它:Spark 是一种与 Hadoop 相似的开源集群计算环境,甚至在某些工作负载方面表现得更加优越。Spark采用一个统一的技术堆栈解决了云计算大数据的如流处理、图技术、机器学习、NoSQL查询等方面的所有核心问题,具有非常完善的生态系统,这直接奠定了其一统云计算大数据领域的霸主地位;
7543
2019-08-06 10:20:49
大数据培训班跟不上怎么办?零基础可以学大数据吗?
在大数据浪潮的裹挟下,不断有学习者涌入大数据培训机构,因而这些学习者的能力也是参差不齐的。这样一来,不少初学者会有这样的疑问:大数据培训班跟不上怎么办?零基础可以学大数据吗?其实大数据的学习只要肯用心,不存在什么学习的门槛。如果零基础的同学跟不上学习进度,自身和培训班都有问题。下面来看看如何解决吧!
6919
2019-09-11 12:49:47
大数据在线学习零基础教程有哪些?
数据开发日新月异,目前国内的数据产业链逐步形成,而大数据也成为了市场上最热门的求职领域之一。高薪且无限的发展前景吸引着许多人想要进入大数据这个行业,但是对于许多零基础的初学者来讲,往往遇到的首要问题,就是没有适合自己学习资源。为了帮助广大的大数据初学者能够轻松入门大数据,下面为大家推荐一些优质的大数据在线学习零基础教程。
5606
2020-05-15 15:24:46
大数据开发和大数据分析该怎么选择?
大数据开发主要是负责大数据挖掘,大数据清洗处理,大数据建模等,负责大规模数据的处理和应用,工作以开发为主与大数据可视化分析工程师相互配合,从数据中挖掘出价值为企业业务发展提供支持。
4587
2021-01-15 10:09:54
