RDD算子——Action 操作

news2024/10/7 12:22:51
  • reduce

    • reducereduceByKey 有什么区别:

      1. reduce 是一个 Action 算子,reduceByKey 是一个转换算子

      2. 假设一个 RDD 里面有一万条数据,大部分 Key 是相同的,有十个不同的 Key。

        rdd.reduceByKey 生成 10 条数据 而rdd.reduce 生成一条数据

        reduceByKey本质上是先按照Key分组,然后把每组聚合

        reduce 是针对于一整个数据集来进行聚合

      3. reduceByKey 是针对 KV 型数据来进行计算,reduce 可以针对所有类型的数据进行计算

    • reduce 算子是一个shuffle操作吗?

      • Shuffle 操作分为 mapper 和 reducer,mapper 将数据放入 paritioner 的函数计算,求得分为哪个 reducer,后分到对应的 reducer 中

      • reduce 操作并没有 mapper 和 reducer, 因为 reduce 算子会作用于 RDD 中的每一个分区,然后在分区上求得局部结果,最终汇总到 Driver 中求得最终结果

    • RDD中有五大属性,Paritioner 在 Shufle 过程中使用 Partitioner 只有 KV 型的 RDD 才有

    • 作用

      • 对整个结果集规约, 最终生成一条数据, 是整个数据集的汇总

    • 调用

      • reduce( (currValue[T], agg[T]) ⇒ T )

    • 注意点

      • reduce 和 reduceByKey 是完全不同的, reduce 是一个 action, 并不是 Shuffled 操作

      • 本质上 reduce 就是现在每个 partition 上求值, 最终把每个 partition 的结果再汇总

    • code

      @Test
      def reduce(): Unit = {
        //注意,函数中传入的curr不是value而是整条数据:("手机", 10)。reduce整体上的结果, 只有一个
        //生成的结果类型是(“商品”,price)
        val rdd = sc.parallelize(Seq(("手机", 10), ("手机", 15), ("电脑", 20)))
        val rdd1 = rdd.reduce((curr, agg)=>("总价",curr._2+agg._2)) // agg 是局部结果,("总价",curr._2+agg)用curr._2+agg._2求总和
        println(rdd1)
      }
  • foreach

    • code

      @Test
      def foreach(): Unit = {
        // //注意点。item的收集是一个异步的过程,并行执行。所以结果可能不是按顺序来的
        val rdd = sc.parallelize(Seq(1, 2, 3))
        rdd.foreach(item => println(item))
      }
  • countcountByKey(两个都是求数量的)

    /*
      * count 和 countByKey 的结果相聚很远,每次调用Action都会生成一个job,job会运行获取结果
      * 所以在两个job之间有大量的log打出,其实就是在启动job
      *
      * countByKey 的运行结果是 Map(key,value 对应的是 Key的 count)
      * 如果要解决数据倾斜的问题,可以通过 countByKey 查看 key 对应的数据总数,从而解决倾斜
      * */
    @Test
    def count(): Unit = {
      val rdd = sc.parallelize(Seq(("a",1),("b",2),("c",3),("a",4)))
      println(rdd.count()) // 4
      println(rdd.countByKey()) // Map(a -> 2, b -> 1, c -> 1)
    }

  • first(只获取第一个元素) take(获取前几个元素)takesample(直接拿到结果和之前的sample类似)

    /*
      * first take takesample
      * 注意点:
      * take按顺序获取。takesample是采样获取
      * first:一般情况下,action会从所有的分区获取数据,相对来说比较慢,但是first只会获取第一个元素。处理第一个分区,无需处理所有的数据比较快
      * */
    @Test
    def take(): Unit = {
      val rdd = sc.parallelize(Seq(1, 2, 3, 4, 5, 6))
      rdd.take(3).foreach(item => println(item)) // 取前3个
      println(rdd.first()) // 取第1个
      rdd.takeSample(withReplacement = true, 3).foreach(item => println(item))
     //withReplacement = true,有放回抽3个
    }

  1. collect (以数组形式返回元素)

  2. 总结

    1. 算子功能上进行分类:

      1. 转换算子transformation

      2. 动作算子Action

    2. RDD中存放的数据类型:

      1. 基本类型 String 对象

      2. KV 类型

      3. 数字类型

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

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

相关文章

VScode/Xshell连接学校服务器

vscode连学校服务器 1.连接atrust VPN2.Xshell连接服务器2.1创建一个自己的用户 3.xftp传文件4.vscode连接服务器4.1下载remote-ssh4.2连接服务器4.3激活conda环境4.4运行代码 5. pytorch版本不兼容解决方案 1.连接atrust VPN 如果是使用的是校园网,可以不连接 2…

已删除数据恢复,4个简单有效方法分享!

“我前段时间不小心将电脑里重要的几个文件删除了,今天查找这些文件时才发现我的数据都没有了,这可怎么办呢?还有恢复的机会吗?” 很多用户在使用电脑时,会选择直接将重要的文件保存在电脑上,这就不可避免在…

Android 架构 - 模块化

参考文章 谷歌官方指南 一、概念 将大型、复杂问题拆解成一个个小的、简单问题,从而可以做到各个击破。模块化简单讲就是把多功能高耦合的代码逻辑拆散成多个功能单一职责明确的模块。模块指 Android 项目中的 module,通常会包含 Gradle 构建脚本、源代…

TS 36.213 V12.0.0-PDSCH相关过程(1)-收到PDSCH的UE过程

本文的内容主要涉及TS 36.213,版本是C00,也就是V12.0.0。

基础数据结构第九期 堆(数组+STL)

前言 堆是一种重要的数据结构,因此应该熟练掌握。 一、堆的基本概念 堆的基本: 堆的结构实际上是一棵完全二叉树,堆可以分为大根堆和小根堆 大根堆: 小根堆: 堆的储存: 若节点小标为i,则左子…

虚拟机VMware安装Linux

关于安装,安装版本是CentOS 7,选择最小安装即可 第一步:选择创建新的虚拟机 第二步:默认典型,点击下一步 第三步:选择稍后安装操作系统 第四步:选择Linux和版本 第五步:输入虚拟机名…

鸿蒙Ability开发-Stage模型下Ability的创建和使用

创建Ability和Page页面 创建两个Ability:EntryAbility,DetailsAbility,其中EntryAbility是由工程默认创建的,这里我们只讲如何创建DetailsAbility。 使用DevEco Studio,选中对应的模块,单击鼠标右键&…

蓝桥杯省赛无忧 竞赛常用库函数 课件7 二分查找

01 二分查找的前提 02 binary_search函数 #include<bits/stdc.h> using namespace std; int main(){vector<int> numbers{1,3,5,7,9};int target 5;//使用binary_search 查找目标元素bool found binary_search(numbers.begin(),numbers.end(),target);if(found){…

利用矩阵特征值解决微分方程【1】

目录 一. 特征值介绍 二. 单变量常微分方程 三. 利用矩阵解决微分方程问题 四. 小结 4.1 矩阵论 4.2 特征值与特征向量内涵 4.3 应用 一. 特征值介绍 线性代数有两大基础问题&#xff1a; 如果A为对角阵的话&#xff0c;那么问题就很好解决。需要注意的是&#xff0c;矩…

强直性脊柱炎=“不死的癌症”?这些常识你不可不知→

对强直性脊柱炎这个疾病&#xff0c;大家最常听说的是&#xff1a;强直性脊柱炎症状重、治疗难&#xff0c;会逐渐引发关节畸形、功能丧失&#xff0c;甚至残疾&#xff0c;被称为「不死的癌症」。 然而&#xff0c;近来越来越多患有强直性脊柱炎的明星活跃在荧幕上&#xff0c…

Azure AI 内容安全Content Safety Studio实战

Azure AI Content Safety 检测应用程序和服务中用户生成和 AI 生成的有害内容。 Azure AI 内容安全包括文本和图像 API&#xff0c;可用于检测有害材料。 交互式 Content Safety Studio&#xff0c;可用于查看、浏览和试用用于检测不同形式的有害内容的示例代码。 关注TechLead…

实践论原文与解读

文章目录 一、原文二、解读1&#xff1a;世界是怎样的&#xff1f;社会是怎样的&#xff1f;每一个单独的个体是怎样和这个世界广泛联系的&#xff1f;想要读懂实践论这是首先要解决的问题。2&#xff1a;认知在生命实践中起怎样的作用&#xff1f;命运是什么&#xff1f;人是否…

C#.Net学习笔记——设计模式六大原则

***************基础介绍*************** 1、单一职责原则 2、里氏替换原则 3、依赖倒置原则 4、接口隔离原则 5、迪米特法原则 6、开闭原则 一、单一职责原则 举例&#xff1a;类T负责两个不同的职责&#xff1a;职责P1&#xff0c;职责P2。当由于职责P1需求发生改变而需要修…

【Java 设计模式】设计原则

文章目录 ✨单一职责原则&#xff08;SRP&#xff09;✨开放/封闭原则&#xff08;OCP&#xff09;✨里氏替换原则&#xff08;LSP&#xff09;✨依赖倒置原则&#xff08;DIP&#xff09;✨接口隔离原则&#xff08;ISP&#xff09;✨合成/聚合复用原则&#xff08;CARP&#…

Golang-strconv库学习笔记

前言&#xff1a; strconv库是go官方提供的一个标准包&#xff0c;主要用于字符串相关的处理。通过参考官方文档、中文文档和其他工具&#xff0c;进行学习记录。学习重点是其中的内置方法。 本文分为Atoi&#xff0c;Format系列&#xff0c;Parse系列&#xff0c;Append系列,…

C++每日一练(14):对称矩阵的判定

题目描述 输入矩阵的行数&#xff0c;再依次输入矩阵的每行元素&#xff0c;判断该矩阵是否为对称矩阵&#xff0c;若矩阵对称输出“yes"&#xff0c;不对称输出”no“。 输入 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示矩阵的行数&#xff0…

UV贴图和展开初学者指南

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 这正是本文的主题——UV贴图——登上舞台的时候。大多数 3D 建…

苹果在美国被禁售有望反转!

都说开门大吉,可2024年似乎对苹果公司并不友好,一会儿是Apple Watch系列在美国被禁售,一会儿又是分析师唱衰iPhone 16,总之各种风声杂糅,给人一种苹果正遭遇重大危机的感觉。 此前美国国际贸易委员会(ITC)下达了对苹果旗下部分智能手表的进口禁令,Apple Watch Series9和…

ssm基于Vue的戏剧推广网站论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统戏剧推广信息管理难度大&#xff0c;容错率低&#xff0c…

解锁前端新潜能:如何使用 Rust 锈化前端工具链

前言 近年来&#xff0c;Rust的受欢迎程度不断上升。首先&#xff0c;在操作系统领域&#xff0c;Rust 已成为 Linux 内核官方认可的开发语言之一&#xff0c;Windows 也宣布将使用 Rust 来重写内核&#xff0c;并重写部分驱动程序。此外&#xff0c;国内手机厂商 Vivo 也宣布…