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篇相关推荐

  1. spark算子_Spark篇之持久化算子

    一.前述 Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存. 控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化 ...

  2. spark学习-Spark算子Transformations和Action使用大全(Transformations章(一))

    spark学习-22-Spark算子Transformations和Action使用大全(Transformations章(一)) http://blog.csdn.net/qq_21383435/a ...

  3. Spark算子汇总和理解(详细)

    Spark之所以比Hadoop灵活和强大,其中一个原因是Spark内置了许多有用的算子,也就是方法.通过对这些方法的组合,编程人员就可以写出自己想要的功能.说白了spark编程就是对spark算子的使 ...

  4. spark算子_Spark常用算子

    Spark的算子分类: 从大方向说,Spark算子大致可以分为以下两类: (1)Transformation变换/转换算子:这种变换并不触发提交作业,这种算子是延迟执行的,也就是说从一个RDD转换生成 ...

  5. Spark算子总结版

    Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...

  6. spark算子的分类

    spark内置了非常多有用的算子(方法),通过对这些算子的组合就可以完成业务需要的功能,spark的编程归根结底就是对spark算子的使用,因此非常有必要对这些内置算子进行详细的归纳. spark算子 ...

  7. 五-中, Spark 算子 吐血总结(转化+行动算子共三十七个)

    文章目录 五-中, Spark 算子吐血总结 5.1.4.3 RDD 转换算子(Transformation) 1. Value类型 1.1 `map` 1.2 `mapPartitions` 1.3 ...

  8. Spark算子:统计RDD分区中的元素及数量

    Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Bl ...

  9. asp.net mvc源码分析-Action篇 Action的执行

    接着上篇 asp.net mvc源码分析-Action篇 DefaultModelBinder 我们已经获取的了Action的参数,有前面的内容我们知道Action的调用时在ControllerAct ...

  10. Spark算子---实战应用

    Spark算子实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat --- ...

最新文章

  1. 11月2日科技联播:销量不及预期苹果市值跌破万亿美元;腾讯表示封杀抖音因微信规则...
  2. docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
  3. C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
  4. 【干货】Html与CSS入门学习笔记12-14【完】
  5. getLocationOnScreen不起作用原因
  6. java 后端与前端Date类型与String类型互相转换(使用注解)
  7. javascript--函数(一)
  8. ​苏宁回应股权质押给淘宝:正常合作;苹果App Store被越狱商店指控垄断;Docker 20.10.0发布|极客日报...
  9. JD_Source Code for problem 1581
  10. CreateWaitableTimer和SetWaitableTimer
  11. 玩转JavaScript OOP[0]——基础类型
  12. java api 第一个类是_java_8_第一个API
  13. PS和AE、PR的区别是什么?
  14. 市场需求文档MRD书写范例
  15. Jmeter查看QPS和响应时间随着时间的变化曲线
  16. 进程之管道Pipe,数据共享Manager,进程池Poo
  17. 经济专业需要学c语言吗,学c语言要什么基础?
  18. 基于微信小程序的充电桩预约管理系统的设计与实现(论文+源码)_kaic
  19. 互联网晚报 | 1月24日 星期一 | 快手与11家省市春晚达成合作;京东首个数字人客服芊言上岗;拉菲虎年限定红酒上线虹宇宙...
  20. 思科access-list 1 permit 1.1.1.0 0.0.254.0 //允许第三位为奇数的路由

热门文章

  1. 串口总线舵机之舵机命令
  2. ANSYS APDL学习(4):ANSYS 基本介绍
  3. 自动配置的IPv4地址怎么取消
  4. 如何申请自己的免费企业邮箱
  5. 树莓派crt安装中文字库和中文输入法
  6. 如何在计算机修改wifi密码,wifi修改密码,教您电脑怎么修改wifi密码
  7. 置换检验 配对秩和检验
  8. 福禄克OTDR系列OFP-100-Q光纤测试仪
  9. python行列式值计算程序_2、3阶行列式计算(python代码)
  10. 苹果手机白屏_苹果手机白屏怎么处理啊