Spark-行动算子

news2024/12/23 8:22:04

1、reduce(聚合)

2、collect(采集)

3、count (统计)

4、first 

5、take 

6、takeOrdered

7、aggregate 

8、fold

9、countByKey

10、countByValue

11、save 算子

12、foreach

算子总结 


 所谓行动算子其实就是触发作业执行的方法,底层代码调用的是环境对象runJob方法

1、reduce(聚合)

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

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

def main(args: Array[String]): Unit = {
    //准备环境
    //"*"代表线程的核数   应用程序名称"RDD"
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(1,2,3,4,5,6))
    val r: Int = rdd.reduce(_+_)

    println(r)

  //关闭环境
  sc.stop()

2、collect(采集)

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

def collect(): Array[T]

        方法会将不同分区的数据安装分区顺序采集到Driver端内存中,形成数组 

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

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 个元素组成的数组

def main(args: Array[String]): Unit = {
    //准备环境
    //"*"代表线程的核数   应用程序名称"RDD"
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(1,2,3,4,5,6))

    //获取数据 take(参数为获取数据的个数)
    val tRDD: Array[Int] = rdd.take(3)
    println(tRDD.mkString(" "))
  //关闭环境
  sc.stop()
  }

 6、takeOrdered

        是在take的基础上先对数据进行排序然后再获取第n个数据

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 

         aggregate 于 aggregateBykey的区别:

  •  aggregate:初始值只会参与分区内的计算
  •  aggregateBykey:初始值会参与分区内和分区外的计算
def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U

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

 val rdd = sc.makeRDD(List(1,2,3,4,5,6))

    val a: Int = rdd.aggregate(0)(_+_,_+_)

    println(a)

8、fold

        当分区内外计算操作相同时使用。折叠操作,aggregate 的简化版操作 

def fold(zeroValue: T)(op: (T, T) => T): T
    val rdd = sc.makeRDD(List(1,2,3,4,5,6))

    val a: Int = rdd.fold(0)(_+_)

    println(a)

9、countByKey

        统计每种 key 出现的个数 

def countByKey(): Map[K, Long]
    val rdd = sc.makeRDD(List(("a",1),("b",2),("a",2),("a",1),("b",4)))
    val ck: collection.Map[String, Long] = rdd.countByKey()
    println(ck)

 

 10、countByValue

        统计元素值出现的次数

    val rdd = sc.makeRDD(List(1,2,3,4,5,6))
    val cv: collection.Map[Int, Long] = rdd.countByValue()
    println(cv)

11、save 算子

        将数据保存到不同格式的文件中

 

1、saveAsTextFile

        保存成 Text 文件

def saveAsTextFile(path: String): Unit
rdd.saveAsTextFile("output")

2、saveAsObjectFile

        序列化成对象保存到文件

def saveAsObjectFile(path: String): Unit
rdd.saveAsObjectFile("output1")

 3、saveAsSequenceFile

        保存成 Sequencefile 文件,要求数据格式必须是K-V类型

def saveAsSequenceFile(
 path: String,
 codec: Option[Class[_ <: CompressionCodec]] = None): Unit
rdd.map((_,1)).saveAsSequenceFile("output2")

12、foreach

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

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

def main(args: Array[String]): Unit = {
    //准备环境
    //"*"代表线程的核数   应用程序名称"RDD"
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(1,2,3,4,5,6,7))

    // 收集后打印
      //下面foreach其实是Driver端内存集合的遍历方法 
    rdd.map(num=>num).collect().foreach(println)
    println("****************")
    // 分布式打印
      //下面foreach其实是Executor端内存数据打印
    rdd.foreach(println)
    
    //关闭环境
  sc.stop()
  }

算子总结 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java编程----继承

文章目录内存管理继承super向上造型内存管理 编写的xxx.java源码&#xff0c;编译为xxx.class字节码&#xff0c;由JVM&#xff08;java解释器&#xff09;来执行&#xff0c;JVM来对接不同的操作系统&#xff0c;实现一次编写&#xff0c;到处执行&#xff1b;JVM向操作系统申…

王朝游戏源码服务端与客户端搭建(基于nodejs与cocoscreator)

成功效果:搭建步骤:安装centos7 64 2009版本操作系统下载并解压mongodb,redis,nodejs3.复制游戏服务与网站服务程序到服务器4.编译nodejsnodejs编译并安装成功后验证5.配置并启动mongodb数据库mongodb.conf配置文件内容:dbpath/home/dev/mongodb/db logpath/home/dev/mongodb/l…

八、发布确认高级

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复 如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f;特别是在这样比较极端的情况&#xff0c;Rabb…

20230311给Ubuntu18.04下的GTX1080M安装驱动

20230311给Ubuntu18.04下的GTX1080M安装驱动 2023/3/11 12:50 2. 安装GTX1080驱动 安装 Nvidia 驱动 367.27 sudo add-apt-repository ppa:graphics-drivers/ppa 第一次运行出现如下的警告&#xff1a; Fresh drivers from upstream, currently shipping Nvidia. ## Curren…

C++语法规则4(C++面向对象)

接口&#xff08;抽象类&#xff09; 接口描述了类的行为和功能&#xff0c;而不需要完成类的特定实现。C 接口是使用抽象类来实现的&#xff0c;抽象类与数据抽象互不混淆&#xff0c;数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚…

在Win 11下使用Visual Studio 2019和cygwin编译JBR(Java SDK 17)源码

很多文章介绍了JDK 8和JDK11源码在Linux编译&#xff0c;很少有人介绍了JDK 17在windows的编译过程&#xff0c;所以写了这篇文章&#xff0c;为什么选用JBR 17版本&#xff0c;因为JBR17 版本集成了HotSwapAgent功能&#xff0c;具体HotSwapAgent有什么用&#xff0c;请看我前…

[N1CTF 2018]eating_cms1

一个cms&#xff0c;先打开环境试了一下弱口令&#xff0c;无效&#xff0c;再试一下万能密码&#xff0c;告诉我有waf&#xff0c;先不想怎么绕过&#xff0c;直接开扫&#xff08;信息收集&#xff09;访问register.php注册一个账号进行登录上面的链接尝试用php读文件http://…

学习笔记:基于SpringBoot的牛客网社区项目实现(三)之MyBatis入门

一、数据库建表 二、entity目录下创建user实体类 三、dao目录下创建userMapper映射接口 Mapper public interface UserMapper {User selectById(int id);User selectByName(String username);User selectByEmail(String email);int insertUser(User user);int updateStatus(i…

tun驱动之read

从tun驱动读取的数据&#xff0c;最终来源于用户空间通过write写入的数据&#xff0c;如下所示&#xff1a; inti fd socket(); int f open("/dev/net/tun", O_RDWR) write(fd, buf, len); --> 协议栈 --> t…

3-MATLAB APP Design-切换按钮组和单选按钮组

一、APP 界面设计展示 1.新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、切换按钮、单选按钮,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:切换按钮和单选按钮的使用,调整背景颜色,字体的颜色为黑色,字体的大小调为26. 2.在左侧组件…

Linux各种发行版介绍

Linux已经被广泛应用在人们的日常生活工作用品中&#xff0c;比如手机&#xff0c;智能家居&#xff0c;汽车电子&#xff0c;可穿戴设备等等&#xff0c;只不过很多人并不知道自己使用的电子设备里面运行的是linux系统。看一组数据&#xff1a;1.90%的公有云应用在使用Linux系…

利用Dockerfile开发定制镜像实战.

Dockerfile的原理 dockerfile是一种文本格式的文件&#xff0c;用于描述如何构建Docker镜像。在Dockerfile中&#xff0c;我们可以定义基础镜像、安装依赖、添加文件等操作&#xff0c;最终生成一个可以直接运行的容器镜像。 Dockerfile的原理可以分为以下几个步骤&#xff1a…

如何快速为子公司创建SAP财务账套的操作步骤

相对来说在SAP上配置一家子公司比从0开始创建创建一家公司可以节省很多步骤&#xff0c;因为子公司的很多配置&#xff08;如科目表&#xff0c;科目&#xff0c;折旧表&#xff0c;折旧代码等&#xff09;可以沿用母公司的。本文就简单介绍一下创建子公司财务账套的配置步骤.只…

中国省市选择插件

快速使用 1.引用 ChineseCities.min.js 2.拷贝以下布局结构 <select id"province"><option value"请选择城市">请选择省份</option> </select> <select id"city"><option value"请选择城市">请…

无监督对比学习(CL)最新必读经典论文整理分享

对比自监督学习技术是一种很有前途的方法&#xff0c;它通过学习对使两种事物相似或不同的东西进行编码来构建表示。Contrastive learning有很多文章介绍&#xff0c;区别于生成式的自监督方法&#xff0c;如AutoEncoder通过重建输入信号获取中间表示&#xff0c;Contrastive M…

设备树下的LED灯

一、什么是设备树设备树&#xff0c;将这个词分开就是设备和树&#xff0c;描述设备树的文件叫DTS(Device Tree Source)&#xff0c;这个DTS文件采用树形结构描述板级设备&#xff0c;也就是开发板上的设备信息&#xff0c;比如CPU数量、内存基地址、IIC接口上接了哪些设备、SP…

进度计划:什么是关键路径管理 1/2

目录 引言 什么是关键路径法&#xff1f; 为什么 CPM 调度对项目管理很重要&#xff1f; CPM 计划元素 关键路径方如何工作&#xff1f; 引言 关键路径&#xff0c;也称为最长路径&#xff0c;是直接影响项目完成日期的一系列任务。关键路径上的每项任务都称为关键活动。…

蓝桥杯C/C++VIP试题每日一练之芯片测试

💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客 🧡博主的个人笔记本:前端面试题 个人笔记本只记录前端领域的面试题目,项目总结,面试技…

【C++学习】【STL】deque容器

dequeDouble Ended Queues(双向队列)deque和vector很相似&#xff0c;但是它允许在容器头部快速插入和删除&#xff08;就像在尾部一样&#xff09;。所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是&#xff0c;deque 容器中存储元素并不能保证所有元素都存储到连续的内…

kubernetes实战与源码学习

1.1 关于Kubernetes的介绍与核心对象概念 关于Kubernetes的介绍与核心对象概念-阿里云开发者社区 k8s架构 核心对象 使用kubeadm10分钟部署k8集群 使用 KuboardSpray 安装kubernetes_v1.23.1 | Kuboard k8s-上部署第一个应用程序 Deployment基本概念 给应用添加service&a…