Spark程序设计——accumulator、广播变量、cache

2024-02-25 06:58

本文主要是介绍Spark程序设计——accumulator、广播变量、cache,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一)accumulator(累加器、计数器)
类似于MapReduce中的counter,将数据从一个节点发送到其他各个节点上去。
通常用于监控,调试,记录符合某类特征的数据数目等。
–分布式counter
Accumulator使用

import SparkContext._
val total_counter=sc.accumulator(OL,"total_counter")//第一个参数表示数字0和long,第二个参数是counter的名字
//定义两个累加器
val counter0=sc.accumulator(OL,"counter0")
val counter1=sc.accumulator(OL,"counter1")val count=sc.parallelize(1 to n,slices).map{i=>total_counter+=1
val x=random*2-1
val y=random*2-1
if(x*x+y*y<1){counter1 +=1 }//累加器counter1加1else{counter0 +=1//累加器counter0加1}if(x*x+y*y<1)1 else 0}.reduce(_+_)

(二)广播变量
广播机制
– 高效分发大对象,比如字典(map),集合(set)等,每个executor一份,而不是每个task一份。

HttpBroadcast与TorrentBroadcast(基于ptop协议,例子电驴下载)
这里写图片描述
不使用广播–低效

val data=Set(1,2,4,6,.....)//大小为128MB
val rdd=sc.parallelize(1 to 6,2)
val observedSizes=rdd.map(_=>data.size)

使用广播高效

val data=Set(1,2,4,6,....)//大小为128MB
val bdata=sc.broadcast(data)//将大小为128MB的Set广播出去
val rdd=sc.parallelize(1 to 1000000,100)
val observedSizes=rdd.map(_=>bdata.value.size.....)
//在各个task中,通过bdata.value获取广播的集合

(三)cache基本概念和使用

Spark RDD Cache
__允许将RDD缓存到内存中或磁盘上,以便重用。
__Spark提供了多种缓存级别,以便于用户根据实际需求进行调整。
这里写图片描述

RDD cache的使用

val data=sc.textFile("hdfs://nn:8020/input")
data.cache()
//data.persist(StorageLevel.DISK_ONLY_2)

深入cache
//下面两段代码的区别在于cache的使用:

val data=sc.textFile("hdfs://nn:8020/input")
data.cache()
data.filter(_.startWith("error")).count
data.filter(_.endWith("hadoop")).count
data.filter(_.startWith("hbase")).count
......

从磁盘上读取1次,之后从内存中读取(在遇到action时执行,将数据加载到内存中)
这里写图片描述

val data=sc.textFile("hdfs://nn:8020/input")
data.filter(_.startWith("error")).count
data.filter(_.endWith("hadoop")).count
data.filter(_.startWith("hbase")).count
......

每次从磁盘上读取数据
这里写图片描述

这篇关于Spark程序设计——accumulator、广播变量、cache的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744714

相关文章

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符