RDD方法又称RDD算子。

算子 : Operator(操作)
RDD的方法和Scala集合对象的方法不一样,集合对象的方法都是在同一个节点的内存中完成的。RDD的方法可以将计算逻辑发送到Executor端(分布式节点)执行,为了区分不同的处理效果,所以将RDD的方法称之为算子。RDD的方法外部的操作都是在Driver端执行的,而方法内部的逻辑代码是在Executor端执行。

RDD的常用方法分为两大类:转换和行动

  • 转换就是将旧的RDD包装成新的RDD,实现功能的补充和封装。比如flatMap和map方法
  • 行动就是触发任务的调度和作业的执行,比如collect方法

RDD行动算子

(1) reduce

➢ 函数签名

def reduce(f: (T, T) => T): T

➢ 函数说明
聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据

val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 聚合数据
val reduceResult: Int = rdd.reduce(_+_)

(2) collect

➢ 函数签名

def collect(): Array[T]

➢ 函数说明
在驱动程序中,以数组 Array 的形式返回数据集的所有元素

val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 收集数据到 Driver
rdd.collect().foreach(println)

需要注意rdd.collect().foreach()和rdd.foreach()的区别,rdd.collect().foreach()是将数据按顺序收集到driver端然后循环遍历,而rdd.foreach()是在各个Executor端分布式循环遍历

(3) count

➢ 函数签名

def count(): Long

➢ 函数说明
返回 RDD 中元素的个数。数据量大时不要用此方法,性能非常低

val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 返回 RDD 中元素的个数
val countResult: Long = rdd.count()

(4) first

➢ 函数签名

def first(): T

➢ 函数说明
返回 RDD 中的第一个元素

val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 返回 RDD 中元素的个数
val firstResult: Int = rdd.first()
println(firstResult)

(5) take

➢ 函数签名

def take(num: Int): Array[T]

➢ 函数说明
返回一个由 RDD 的前 n 个元素组成的数组

val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 返回 RDD 中元素的个数
val takeResult: Array[Int] = rdd.take(2)
println(takeResult.mkString(","))

(6) takeOrdered

➢ 函数签名

def takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T]

➢ 函数说明
返回该 RDD 排序后的前 n 个元素组成的数组

val rdd: RDD[Int] = sc.makeRDD(List(1,3,2,4))
// 返回 RDD 中元素的个数
val result: Array[Int] = rdd.takeOrdered(2)

(7)aggregate

➢ 函数签名

def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U

➢ 函数说明
分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合

val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 8)
// 将该 RDD 所有元素相加得到结果
//val result: Int = rdd.aggregate(0)(_ + _, _ + _)
val result: Int = rdd.aggregate(10)(_ + _, _ + _)

aggregateByKey:初始值只会参与分区内计算
aggregate:初始值会参与分区内计算,并且参与分区间计算

reduceByKey、aggregateByKey在shuffle之前可能会先进行聚合,聚合后的数据再进行shuffle,这样一来进行shuffle的数据会变少,速度会快。
reduceByKey、aggregateByKey的区别是前者不同partition以及partition之间的聚合操作是一样的,而后者可以指定两种操作来对应于- —partition之间和partition内部不同的聚合操作,并且aggregateByKey可以指定初始值。
在aggregateByKey中,如果两种操作是一样的,可以使用foldByKey来代替,并且只传一个操作函数。foldBykey和reudceBykey的区别是前者可以指定一个初始值。

(8) fold

➢ 函数签名

def fold(zeroValue: T)(op: (T, T) => T): T

➢ 函数说明
折叠操作,aggregate 的简化版操作

val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))
val foldResult: Int = rdd.fold(0)(_+_)

(9) countByKey

➢ 函数签名

def countByKey(): Map[K, Long]

➢ 函数说明
统计每种 key 的个数

val rdd: RDD[(Int, String)] = sc.makeRDD(List((1, "a"), (1, "a"), (1, "a"), (2,
"b"), (3, "c"), (3, "c")))
// 统计每种 key 的个数
val result: collection.Map[Int, Long] = rdd.countByKey()

(10) save 相关算子

➢ 函数签名

def saveAsTextFile(path: String): Unit
def saveAsObjectFile(path: String): Unit
def saveAsSequenceFile(path: String,codec: Option[Class[_ <: CompressionCodec]] = None): Unit

➢ 函数说明
将数据保存到不同格式的文件中

// 保存成 Text 文件
rdd.saveAsTextFile("output")
// 序列化成对象保存到文件
rdd.saveAsObjectFile("output1")
// 保存成 Sequencefile 文件,要求数据格式为K-V类型
rdd.map((_,1)).saveAsSequenceFile("output2")

(11) foreach

➢ 函数签名

def foreach(f: T => Unit): Unit = withScope {val cleanF = sc.clean(f)sc.runJob(this, (iter: Iterator[T]) => iter.foreach(cleanF))
}

➢ 函数说明
分布式遍历 RDD 中的每一个元素,调用指定函数

val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 收集后打印,这里的foreach是Driver端内存集合的循环遍历方法
rdd.map(num=>num).collect().foreach(println)
println("****************")
// 分布式打印,这里的foreach是Executor端内存数据的循环遍历方法
//由于各节点的执行顺序不定,因此数据打印的顺序也是不确定的
rdd.foreach(println)

Spark学习笔记(7)——RDD行动算子相关推荐

  1. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  2. spark 学习笔记

    spark 学习笔记 spark介绍 Spark是是一种快速通用的集群计算系统,它的主要特点是能够在内存中进行计算.它包含了 spark 核心组件 spark-core,用于 SQL 和结构化处理数据 ...

  3. Spark学习笔记[1]-scala环境安装与基本语法

    Spark学习笔记[1]-scala环境安装与基本语法   正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...

  4. pythonsparkpickle_Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令

    <Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...

  5. Spark学习笔记10:创建RDD

    目录 一.什么是RDD (一)RDD概念 (二)RDD示例 (三)RDD主要特征 二.做好准备工作 (一)准备文件 1.准备本地系统文件 2.启动HDFS服务 3.准备HDFS系统文件 (二)启动Sp ...

  6. spark学习笔记!!!!

    文章目录 1.spark概述 2.spark运行架构 2.1.核心组件 2.2.核心概念 2.3.Spark提交流程 3.spark核心编程 3.1.RDD 3.1.1.什么是RDD 3.1.2.RD ...

  7. 三万字,Spark学习笔记

    Spark 基础 Spark特性 Spark使用简练优雅的Scala语言编写,基于Scala提供了交互式编程体验,同时提供多种方便易用的API.Spark遵循"一个软件栈满足不同应用场景&q ...

  8. Spark学习笔记(8)---Spark Streaming学习笔记

    Spark Streaming学习笔记 同Spark SQL一样,Spark Streaming学习也是放在了github https://github.com/yangtong123/RoadOfS ...

  9. opencv学习笔记18:canny算子边缘检测原理及其函数使用

    canny边缘检测原理 去噪:边缘检测容易受到噪声的影响,在此之间,先去噪,通常采用高斯滤波器.opencv学习笔记11:图像滤波(均值,方框,高斯,中值) 梯度:对去噪后的图像采用sobel算子计算 ...

最新文章

  1. Google使用机器学习助力数据中心节能
  2. 字符串匹配--Sunday算法
  3. ZK的实际应用:MVVM –加载和渲染数据
  4. 蓝叠 正在检查服务器最新,Windows update一直停留在正在检查更新
  5. android之ScrollView里嵌套ListView(转)
  6. Android中的WebView之loadDataWithBaseURL()与loadData()
  7. 决策树(十二)--XGBoost
  8. CNN数值初始化——xavier
  9. 三菱Q系列PLC大型程序Q01U伺服12轴 实际使用中程序
  10. sniffer与网络执法官,p2p终结者的简单对比
  11. windows 文件保护机制
  12. Linux下使用php实现office转PDF
  13. 学好算法,真的需要智商吗?
  14. Project Sumatra
  15. 在c语言中 实参与其对应的形参各占独立的存储单元,以下正确的说法是( )。在C语言中: A.实参和与其对应的形参各占用独立的存储单元...
  16. Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程
  17. mysql职业生涯规划书_计算机应用职业生涯规划书.pdf
  18. 笔记本电脑计算机乱跳,笔记本屏幕的鼠标指针乱跳解决方法
  19. 龙芯平台下调试蜂鸣器
  20. 简单魔兽改键的基本原理及基于MFC实现

热门文章

  1. C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构
  2. 百度easydl代码集成移植到安卓
  3. 智慧城市建设数字化,楼宇对讲炙手可热
  4. android获取录音音量大小,Android 获取麦克风音量
  5. ffmpeg制作视频播放器(十四)XPlay2 read接口
  6. SimpleFOC移植STM32(五)—— 电流采样及其变换
  7. win7不能安装adobe pdf打印机的解决方案
  8. 一般来说人工智能技术包括哪些
  9. 揭秘开心网:创始人无专属办公室月薪9000
  10. 解决word2013图片不能替换