【Spark共享变量分析】

前言

当一个函数传递给spark集群去运行的时候(map,reduce)。该函数的所有变量都会在各个节点的任务中创建一个副本,当该变量数据计较大的手,会极大的占用计算机宝贵的内存资源。并且各个节点的变量是相互隔离的,变量的更新也不会传入到driver中。针对于此,spark提供了两种类型的共享变量,广播变量和累加器。

闭包

跨作用域访问函数量变。深度解释,在spark集群中,如果在main函数也就是driver中定义了变量,使用foreach或者map等函数使用该变量的时候,会在每个节点任务中创建该变量的副本,并且对于副本的操作更新相互隔离的,也就是说每个节点对于变量的更新操作都不会影响driver中的变量值,这样就是闭包,闭包会导致数据操作异常。

广播变量

使用广播变量可以是变量在每个节点上缓存一个副本而不是各个任务中

sparkcontext.broadcast(Array(1,2,3))

累加器

使用累加器可以方便的在集群中统计数量,一般使用+=进行自增,我们也可以使用自定义的累计器,继承AccumulatorParam

val c = sparkcontext.accumulator(0,"a")

c+=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容