10.9 Broadcast广播变量
共享变量可用于节省内存与运行时间,提升并行处理时的执行效率。共享变量包括Broadcast(广播变量)和accumulator(累加器)。
10.9.1不使用Broadcast广播变量的范例。
先创建水果编号与名称对照表,然后使用此对照表将水果编号转换为水果编号。
#创建kvFruit
kvFrult=sc.parallelize([(1,“apple”),(2,“orange”),(3,“banana”),(4,“grape”)])
#创建fruitMap字典
fruitMap=kvFrult.collectAsMap()
print"字典:"+str(fruitMap)
#创建fruitIds
fruitIds=sc.parallelize([2,4,1,3])
print"水果编号:"+str((fruitIds).collect())
#使用fruitMap字典进行转换
print"使用字典进行转换=>"
fruitNames=fruitIds.map(lambda x:fruitMap[x]).collect()
print"水果名称:"+str(fruitNames)
虽然上面程序执行没有问题,但是在并行处理中每执行一次转换都必须将fruitIds与fruitMap传送到Worker Node,才能执行转换。如果字典fruitMap(对照表)很大,而且需要转换的fruit 水果编号RDD也很大,就会造成耗费很多内存与时间。
为了解决这一问题,就必须使用Broadcast广播变量。