Spark---行动算子RDD

文章目录

  • 1.行动算子
      • 1.1 reduce
      • 1.2 collect
      • 1.3 first
      • 1.4 count
      • 1.5 take
      • 1.6 takeOrdered
      • 1.7 aggregate
      • 1.8 fold
      • 1.9 countByKey
      • 1.10 countByValue
      • 1.11 save 相关算子
      • 1.12 foreach

1.行动算子

Spark的行动算子是触发作业执行的方法,它们会直接触发计算并返回结果。
行动算子可以分为两类:数据运算类和数据存储类。数据运算类算子主要用于触发RDD计算,并得到计算结果返回给Spark程序或Shell界面,例如reduce()函数。数据存储类算子用于触发RDD计算后,将结果保存到外部存储系统中,如HDFS文件系统或数据库,例如saveAsObjectFile()函数。

在Spark中,转换算子并不会马上进行运算,而是所谓的“惰性运算”,在遇到行动算子时才会执行相应的语句,触发Spark的任务调度并开始进行计算。行动算子可以直接对RDD进行操作,并且返回一个值或者将结果保存到外部存储系统。

1.1 reduce

聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据
函数定义:

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

    val data: RDD[Int] = sparkRdd.makeRDD(List(1, 2, 3, 4))
    val res:Int = data.reduce((x, y) => x + y)
    println(res)

1.2 collect

在驱动程序中,以数组 Array 的形式返回数据集的所有元素
函数定义:

def collect(): Array[T]

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

1.3 first

返回 RDD 中的第一个元素
函数定义:

def first(): T

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

1.4 count

返回 RDD 中元素的个数
函数定义:

def count(): Long

    val data: RDD[Int] = sparkRdd.makeRDD(List(1, 2, 3, 4))
    val res: Long = data.count()
    println(res)

在这里插入图片描述

1.5 take

返回一个由 RDD 的前 n 个元素组成的数组
函数定义:

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

    val data: RDD[Int] = sparkRdd.makeRDD(List(1, 2, 3, 4))
    val res: Array[Int] = data.take(2)
    res.foreach(println)

在这里插入图片描述

1.6 takeOrdered

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

函数定义:

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

    val data: RDD[Int] = sparkRdd.makeRDD(List(1,4,3,2))
    val res: Array[Int] = data.takeOrdered(2)
    res.foreach(println)

在这里插入图片描述

1.7 aggregate

分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合
函数定义:

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

    val data: RDD[Int] = sparkRdd.makeRDD(List(1,4,3,2))
    val res: Int =data.aggregate(0)(_+_,_+_)
    println(res)

在这里插入图片描述

注意:aggregate在使用的时候与aggregateByKey的区别在于:aggregate设置的初始值不仅会与分区内的第一个元素相加,而且还会与分区间的第一个元素相加。
aggregateByKey设置的初始值只会与分区内的第一个元素相减加。

1.8 fold

折叠操作,aggregate 的简化版操作
函数签名

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

    val data: RDD[Int] = sparkRdd.makeRDD(List(1,4,3,2))
    val res: Int =data.fold(0)(_+_)
    println(res)

1.9 countByKey

统计每种 key 的个数

函数签名

def countByKey(): Map[K, Long]

    val data:RDD[(String,Int)]= sparkRdd.makeRDD(List(("a",1),("a",2),("a",3),("b",4),("c",5),("c",6)))
    val res: collection.Map[String, Long] =data.countByKey()
    res.foreach(println)

在这里插入图片描述

1.10 countByValue

countByValue用于统计RDD中每个元素的出现次数。这个方法返回一个Map,其中键是RDD中的元素,值是每个元素在RDD中出现的次数。

    val data:RDD[(String,Int)]= sparkRdd.makeRDD(List(("a",1),("a",2),("a",3),("b",4),("c",5),("c",6)))
    val res=data.countByValue()
    res.foreach(println)

在这里插入图片描述

1.11 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 文件
rdd.map((_,1)).saveAsSequenceFile("output2")

1.12 foreach

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

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

//收集后打印
rdd.map(num=>num).collect().foreach(println)
//分布式打印
rdd.foreach(println)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/309229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【集合大练习】---------------简易学生管理系统

目标&#xff1a; 实现学生对象新增&#xff0c;删除&#xff0c;查看&#xff0c;对象信息修改 整体实现思路&#xff1a; 1.定义学生类-------------创建学生对象 2.管理界面代码编写-------------命令提示面板 3.添加学生的代码编写---------add功能实现 4.查看学生信…

PPT插件-大珩助手-清除同类

清除同类-颜色 对于选定的形状&#xff0c;删除相同颜色 清除同类-文本 删除当前幻灯片中的文本对象 清除同类-非文本 删除当前幻灯片中的非文本对象 清空当页 删除当前幻灯片中的所有对象 选中的形状动画 删除选中的对象上的形状动画 当前页形状动画 对于当前页中的…

HDFS相关API操作

文章目录 API文档环境配置API操作准备工作创建文件夹文件上传文件下载文件删除文件的更名和移动获取文件详细信息 API文档 HDFS API官方文档&#xff1a;https://hadoop.apache.org/docs/r3.3.1/api/index.html 环境配置 将Hadoop的Jar包解压到非中文路径&#xff08;例如D:…

移动通信原理与关键技术学习之信道编解码(5)

先回顾调制的过程&#xff1a;调制就是对信号源的信息进行处理加到载波上&#xff0c;使其变为适合于信道传输的形式的过程&#xff0c;就是使载波随信号而改变的技术。 1.什么是IQ调制&#xff1f; 答&#xff1a;将数据分为两路&#xff0c;分别进行载波调制&#xff0c;两…

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测 目录 多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-HKELM霜冰算法优化混合核极限学…

2024年中国杭州|网络安全技能大赛(CTF)正式开启竞赛报名

前言 一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的…

【开源】基于JAVA+Vue+SpringBoot的厦门旅游电子商务预订系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

redis复习笔记04(小滴课堂)

新版SpringBoot2.X项目创建 在线创建springboot项目选择web和redis依赖就行。 SpringBoot2.x整合Redis客户端单元测试 SpringDataRedis配置RedisTemplate介绍 1.编写配置文件 2.单元测试进行测试&#xff1a; 可以看到我们设置进的值&#xff0c;乱码后面会解决。 获取不到设…

网络正常运行时间监控工具

正常运行时间是衡量系统可靠性的指标&#xff0c;表示为机器工作和可用时间的百分比。当提到 IT 网络时&#xff0c;正常运行时间是衡量网络设备、网站和其他服务的可用性的指标。网络正常运行时间通常以百分位数来衡量&#xff0c;例如“五个 9”&#xff0c;这意味着系统在 9…

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用RPA全球生态 2024-01-05 17:27 发表于河北

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷&#xff0c;但现有研究成果主要集中在财务业务单一领域&#xff0c;缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理&#xff0c;无论从自身技术发展&#xff0c;或…

如何使用vite框架封装一个js库,并发布npm包

前言介绍 最近&#xff0c;公司项目上需要把很多公用函数封装起来&#xff0c;作为一个公共的库使用。以前的做法是使用webpack或者Rollup。Rollup和Webpack都是常用的JavaScript模块打包工具&#xff0c;用于构建现代化的Web应用程序。但是&#xff0c;不管是webpack或者Roll…

Hive基础题-1

别看我&#xff0c;不看答案我也不会写 正因为不会写&#xff0c;所以才要每天一练 本地hive练习题 SET hive.exec.mode.local.autotrue; -- 默认 false SET hive.exec.mode.local.auto.inputbytes.max50000000; SET hive.exec.mode.local.auto.input.files.max5; -- 默认 4# …

docker 容器添加指定网络地址

docker 容器添加指定网络地址 在搭建halo博客时&#xff0c;准备让 halo、mysql8.1、nginx 三个容器在同一个网段中&#xff0c;并指定IP。 实现docker内部容器之间网络互通。 查看容器网络信息命令 docker inspect 容器名各容器部署成功后网络效果如下&#xff1a; nginx …

HCIP实验1

华子目录 实验拓扑实验要求实验步骤合理的划分网段配置IP地址RIP宣告路由全网可达&#xff08;V1与V2需相互兼容&#xff09;R2访问R7走R5访问R1为运营商&#xff0c;r1远程登录r2实际登录r7测试 实验拓扑 实验要求 实验步骤 合理的划分网段 配置IP地址 R1 R2 R3 R4 R5 …

国产化嵌入式AI芯片

中国在嵌入式AI芯片领域已经取得了显著进展&#xff0c;产生了许多有竞争力的品牌和产品。 以下是一些知名的中国嵌入式AI芯片品牌及其产品系列和特点&#xff1a; 华为海思&#xff08;HiSilicon&#xff09; 芯片系列&#xff1a;麒麟系列产品特点&#xff1a;麒麟系列在智能…

强化学习求解TSP(六):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

【刷题篇】动态规划(八)

文章目录 1、分割回文串 IV2、分割回文串 II3、最长回文子序列4、让字符串成为回文串的最少插入次数5、最长公共子序列6、不相交的线 1、分割回文串 IV 给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;那么返回 true &#xff0c;否则返回…

浅谈WPF之Popup弹出层

在日常开发中&#xff0c;当点击某控件时&#xff0c;经常看到一些弹出框&#xff0c;停靠在某些页面元素的附近&#xff0c;但这些又不是真正的窗口&#xff0c;而是页面的一部分&#xff0c;那这种功能是如何实现的呢&#xff1f;今天就以一个简单的小例子&#xff0c;简述如…

车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 基本假设 4.2 运动学方程 5.完整工程文件 1.课题概述 车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程. 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a .…

内存分区模型---C++

目录 内存分区模型1.1 程序运行前1.2 程序运行后1.2.1 new操作符 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的&#xff1b;全局区&#xff1a;存放全局变量和静态变量以及常…