PySpark实战:广播变量

来自CloudWiki
跳转至: 导航搜索

介绍

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

而不是每个任务保存一个拷贝

借助广播变量,可以用一种更高效的方式来共享一些数据,比如一个全局配置文件,可以通过广播变量共享给所有节点。

应用

广播变量brVar是普通变量v的一个包装变量,

各个节点都可以通过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
#{'ip': '192.168.1.1', 'key': 'cumt'}
print("获取广播变量值:")
print(a)
#cumt
print(a["key"])
#更新广播变量
brVar.unpersist()
conf["key"] = "jackwang"
#再次广播
brVar =  sc.broadcast(conf)
#获取广播新变量值
a = brVar.value
#{'ip': '192.168.1.1', 'key': 'jackwang'}
print("获取新的广播变量值:")
print(a)
#destroy()可将广播变量的数据和元数据一同销毁,销毁后不能使用
brVar.destroy()
##############################################
sc.stop()


  • 广播变量brVar可以在集群的其他节点上进行共享
  • 在不同的节点上,可以通过a = brVar.value获取广播变量brVar的值。

输出

获取广播变量值:
{'ip': '192.168.1.1', 'key': 'cumt'}
cumt
获取新的广播变量值:
{'ip': '192.168.1.1', 'key': 'jackwang'}