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

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

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

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