spark算子--action篇
spark算子分为两大种,一种是transformation算子,另一种是action算子。
transformation又叫转换算子,它从一个RDD到另一个RDD是延迟执行的,不会马上触发作业的提交,只有在后续遇到某个action算子时才执行;
action算子会触发SparkContext提交Job,并将数据输出spark系统。今天举例讲解一下action算子。
1) count
就是统计RDD中元素个数的算子。
举个栗子:
val rdd = sc.parallelize(List("hello","world!","hi","beijing"))
println(rdd.count())
输出:
4
2) collect
把RDD中的元素提取到driver内存中,返回数组形式。
举个栗子:
val rdd = sc.parallelize(List("hello","world!","hi","beijing"),2)
val arr: Array[String] = rdd.collect()
println(arr)
arr.foreach(println)
输出:
[Ljava.lang.String;@760e8cc0
hello
world!
hi
beijing
3) foreach
遍历RDD中的每一个元素,无返回值。此算子用法参考上下文。
4) saveAsTextFile
把RDD中的数据以文本的形式保存
举个栗子:
val rdd = sc.parallelize(List(5,4,7,1,9),3)
rdd.saveAsTextFile("/home/myname/test")
5) saveAsSequenceFile
是个k-v算子,把RDD中的数据以序列化的形式保存。使用此算子的前提是RDD中元素是键值对格式。
举个栗子:
val rdd = sc.parallelize(List(("a",1),("b",2),("c",3),("c",4)),2)
rdd.saveAsSequenceFile("/home/myname/test")
6) countByKey
是个k-v算子,按key统计各key的次数,返回Map
举个栗子:
val rdd = sc.parallelize(List(("a",1),("b",2),("c",3),("c",4)),2)
val res: Map[String, Long] = rdd.countByKey()
res.foreach(println)
输出:
(b,1)
(a,1)
(c,2)
7) collectAsMap
把RDD中元素以Map形式提取到driver端。需要注意的是如果存在多个相同key,后面出现的会覆盖前面的。
举个栗子:
val rdd = sc.parallelize(List(("a",1),("b",2),("c",3),("c",4)),2)
val res: Map[String, Int] = rdd.collectAsMap()
res.foreach(println)
输出:
(b,2)
(a,1)
(c,4)
8) take
从RDD中取下标前n个元素,不排序。返回数组。
举个栗子:
val rdd = sc.parallelize(List(5,4,7,1,9),3)
val take: Array[Int] = rdd.take(2)
take.foreach(println)
输出:
5
4
9) takeSample
从指定RDD中抽取样本。第一个参数为false表示取过的元素不再取,为true表示取过的元素可以再次被抽样;第二个参数表示取样数量;第三个参数不好把握建议默认值
举个栗子:
val rdd = sc.makeRDD(Array("aaa","bbb","ccc","ddd","eee"))
val sample: Array[String] = rdd.takeSample(false,2)
sample.foreach(println)
输出:
eee
bbb
10) first
返回RDD中第一个元素。
举个栗子:
val rdd = sc.parallelize(List(5,4,7,1,9),3)
val first: Int = rdd.first()
println(first)
输出:
5
11) top
从RDD中按默认顺序(降序)或指定顺序取n个元素
举个栗子:
val rdd = sc.parallelize(List(5,4,7,1,9),3)
val take: Array[Int] = rdd.top(2)
take.foreach(println)
输出:
9
7
12) takeOrdered
从RDD中取n个元素,与top算子不同的是它是以和top相反的顺序返回元素。
举个栗子:
val rdd = sc.parallelize(List(5,4,7,1,9),3)
val take: Array[Int] = rdd.takeOrdered(2)
take.foreach(println)
输出:
1
4
13) saveAsObjectFile
把RDD中元素序列化并保存,底层依赖saveAsSequenceFile
举个栗子:
val rdd = sc.parallelize(List(5,4,7,1,9),3)
rdd.saveAsObjectFile("/home/myname/test")
14)reduce
reduce参数是一个函数,把RDD中的元素两两传递给此函数,然后进行计算产生一个结果,结果再与下一个值计算,如此迭代。
举个栗子:
val rdd = sc.makeRDD(List(1,2,3,4,5))
val result: Int = rdd.reduce((x, y) => x + y)
println(result)
输出:
15
15) lookup
是个k-v算子,指定key值,返回此key对应的所有v值
举个栗子:
val rdd1 = sc.makeRDD(Array(("A",0),("A",2),("B",1),("B",2),("C",1)))
val rdd2: Seq[Int] = rdd1.lookup("A")
rdd2.foreach(println)
输出:
0
2
16) aggregate
aggregate用户聚合RDD中的元素,先指定初始值,再对RDD中元素进行局部求和,最后全局求和。此算子理解起来不是特别直观,大家感受一下。
举个栗子:
val rdd = sc.parallelize(List(1, 2, 3, 4))
val res: Int = rdd.aggregate(2)(_+_,_+_)
println(res)
输出:
14
17) fold
fold是aggregate的简化
举个栗子:
val rdd = sc.parallelize(List(1, 2, 3, 4))
val res: Int = rdd.fold(2)((x,y) => x + y)
println(res)
输出:
14
喜欢的话请微信扫描下方二维码关注我!
spark算子--action篇相关推荐
- spark算子_Spark篇之持久化算子
一.前述 Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存. 控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化 ...
- spark学习-Spark算子Transformations和Action使用大全(Transformations章(一))
spark学习-22-Spark算子Transformations和Action使用大全(Transformations章(一)) http://blog.csdn.net/qq_21383435/a ...
- Spark算子汇总和理解(详细)
Spark之所以比Hadoop灵活和强大,其中一个原因是Spark内置了许多有用的算子,也就是方法.通过对这些方法的组合,编程人员就可以写出自己想要的功能.说白了spark编程就是对spark算子的使 ...
- spark算子_Spark常用算子
Spark的算子分类: 从大方向说,Spark算子大致可以分为以下两类: (1)Transformation变换/转换算子:这种变换并不触发提交作业,这种算子是延迟执行的,也就是说从一个RDD转换生成 ...
- Spark算子总结版
Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...
- spark算子的分类
spark内置了非常多有用的算子(方法),通过对这些算子的组合就可以完成业务需要的功能,spark的编程归根结底就是对spark算子的使用,因此非常有必要对这些内置算子进行详细的归纳. spark算子 ...
- 五-中, Spark 算子 吐血总结(转化+行动算子共三十七个)
文章目录 五-中, Spark 算子吐血总结 5.1.4.3 RDD 转换算子(Transformation) 1. Value类型 1.1 `map` 1.2 `mapPartitions` 1.3 ...
- Spark算子:统计RDD分区中的元素及数量
Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Bl ...
- asp.net mvc源码分析-Action篇 Action的执行
接着上篇 asp.net mvc源码分析-Action篇 DefaultModelBinder 我们已经获取的了Action的参数,有前面的内容我们知道Action的调用时在ControllerAct ...
- Spark算子---实战应用
Spark算子实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat --- ...
最新文章
- 11月2日科技联播:销量不及预期苹果市值跌破万亿美元;腾讯表示封杀抖音因微信规则...
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
- 【干货】Html与CSS入门学习笔记12-14【完】
- getLocationOnScreen不起作用原因
- java 后端与前端Date类型与String类型互相转换(使用注解)
- javascript--函数(一)
- ​苏宁回应股权质押给淘宝:正常合作;苹果App Store被越狱商店指控垄断;Docker 20.10.0发布|极客日报...
- JD_Source Code for problem 1581
- CreateWaitableTimer和SetWaitableTimer
- 玩转JavaScript OOP[0]——基础类型
- java api 第一个类是_java_8_第一个API
- PS和AE、PR的区别是什么?
- 市场需求文档MRD书写范例
- Jmeter查看QPS和响应时间随着时间的变化曲线
- 进程之管道Pipe,数据共享Manager,进程池Poo
- 经济专业需要学c语言吗,学c语言要什么基础?
- 基于微信小程序的充电桩预约管理系统的设计与实现(论文+源码)_kaic
- 互联网晚报 | 1月24日 星期一 | 快手与11家省市春晚达成合作;京东首个数字人客服芊言上岗;拉菲虎年限定红酒上线虹宇宙...
- 思科access-list 1 permit 1.1.1.0 0.0.254.0 //允许第三位为奇数的路由