PySpark实战(四)——共享变数(变量)的两种方法

目录

广播变量

累加器


【在Spark集群不同节点之间共享变量】

广播变量

允许程序缓存一个只读的变量在集群的每台机器上。

一个广播变量 brVar,通过调用 brvar = SparkContext.broadcast(v) 方法,从一个普通变量v中创建出来;

广播变量是 v 的一个包装变量,值可以通过value方法访问,各个节点都可以通过 brVar.value 来引用广播的数据。

import findspark

findspark.init()

from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[1]').appName('RDD Demo').getOrCreate()
sc = spark.sparkContext

conf = {'ip':'192.168.1.1', 'key':'cumt'}

# 广播变量
brVar = sc.broadcast(conf)

# 获取广播变量的值
a = brVar.value
a

 

累加器

# 是一种只能利用关联操作做“加”操作的变数
# 常见作用:调试时进行相关事件的计数
# SparkContext.accumulator(v) 根据初始变量 v 创建出累加器对象
# Spark 集群上,不同节点的计算任务都可以用add方法或使用+=进行累加
# 累加器是一种只可加的变数对象

rdd = sc.range(1,101)

# 创建累加器,初始值0
acc = sc.accumulator(0)

def fcounter(x):
    global acc
    if x % 2 == 0:
        acc += 1

rdd_counter = rdd.map(fcounter)

# 获取累加器数值
print(acc.value)

# 定制存储级别,保证多次正确获取累加器值
rdd_counter.persist()

print(rdd_counter.count())
print(acc.value)

# 保证准确性,只能用一次动作操作
# 若要多次使用,要在RDD对象上用persist()或cache()进行阻断操作,切断依赖,保证只执行一次

print(rdd_counter.count())
print(acc.value)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值