Spark-Scala语言实战(12)

news2025/1/17 6:02:58

在之前的文章中,我们学习了如何在spark中使用键值对中的join,rightOuterJoin,leftOuterJoin三种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-Scala语言实战(11)-CSDN博客文章浏览阅读670次,点赞27次,收藏16次。今天开始的文章,我会带给大家如何在spark的中使用我们的键值对方法,今天学习键值对方法中的join,rightOuterJoin,leftOuterJoin三种方法。希望我的文章能帮助到大家,也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/137357301今天的文章开始,我会继续带着大家如何在spark的中使用我们的键值对里的方法。今天学习键值对方法中的keys和values,reduceByKey,groupByKey三种方法。

目录

一、知识回顾

二、键值对方法

1.keys和values

2.reduceByKey

3.groupByKey

拓展-方法参数设置


一、知识回顾

上一篇文章中我们学习了键值对的三种方法,分别是join,rightOuterJoin,leftOuterJoin。

join

 join方法可以将两个RDD键值对进行内连接,它会将两个RDD键值对中拥有相同键的值进行连接。

rightOuterJoin方法是右外连接。只会包含右键值对的键,如果左边有右边的键,对应的值会连接。如果左边没有右边的键,就会显示None值(空值)。

leftOuterJoin与rightOuterJoin方法想法,它是左外连接,也就是如果右边有左边的键,对应的值会连接。如果右边没有左边的键,就会显示None值(空值)。

现在,开始今天的学习吧~

二、键值对方法

1.keys和values

  • 键值对RDD,包含键和值两个部分。
  • Spark提供了两种方法,分别获取键值对RDD的键和值。
  • keys方法返回一个仅包含键的RDD
  • values方法返回一个仅包含值的RDD
import org.apache.spark.{SparkConf, SparkContext}
object p1 {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("p2")
    val sc=new SparkContext(conf)
    // 创建一个包含键值对的RDD
    val p = sc.parallelize(Seq(("a", 1), ("b", 2), ("c", 3), ("d", 4)))
    // 使用keys方法获取所有的键
    val p1 = p.keys
    p1.collect().foreach(println) // 输出:a, b, c, d
    // 使用values方法获取所有的值
    val p2 = p.values
    p2.collect().foreach(println) // 输出:1, 2, 3, 4
  }
}

可以看到我们创建了一个包含a,b,c,d四个元素的键与包含1,2,3,4四个元素的值,分别使用 keys与values获取它们对应的元素,那么键应该输出abcd,而值应该输出1234,现在运行代码。

 与预期一致,快去试试吧~

2.reduceByKey

  • 当数据集以键值对形式展现时,合并统计键相同的值是很常用的操作。
  • reduceByKey()方法用于合并具有相同键的值,作用对象是键值对,并且只对每个键的值进行处理,当RDD中有多个键相同的键值对时,则会对每个键对应的值进行处理。
  • reduceByKey()方法需要接收一个输入函数,键值对RDD相同键的值会根据函数进行合并并且创建一个新的RDD作为返回结果。
import org.apache.spark.{SparkConf, SparkContext}
object p1 {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("p2")
    val sc=new SparkContext(conf)
    // 创建一个包含键值对的RDD
    val p = sc.parallelize(Seq(("a", 1), ("b", 2), ("a", 3), ("b", 4), ("c", 5)))
    // 使用reduceByKey方法将具有相同键的值进行相加
    val pp = p.reduceByKey((x, y) => x + y)
    // 收集结果并打印
    pp.collect().foreach(println)
  }
}

 通过代码,我们创建了一个包含abc三个键的RDD,但a,b两个键对应有多个值,那么使用reduceByKey方法,就可以将具有相同键的值进行相加。那么a的值就应该是1+3=4,b的值2+4=6,c不变。

运行代码,可以看到与预期输出一致。 

3.groupByKey

  • groupByKey()方法用于对具有相同键的值进行分组,可以对同一组的数据进行计数、求和等操作。
  • 对于一个由类型K的键和类型V的值组成的RDD,通过groupByKey()方法得到的RDD类型是[K,Iterable[V]]
import org.apache.spark.{SparkConf, SparkContext}
object p1 {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("p2")
    val sc=new SparkContext(conf)

    val p = sc.parallelize(Seq(("a", "1"), ("a", "3"), ("b", "6"), ("a", "7"), ("b", "2")))
    // 使用groupByKey方法将具有相同键的值分组
    val pp= p.groupByKey()
    // 收集结果并打印
    pp.collect().foreach(println)
    }
}

我们创建了一个包含ab两个键的RDD,它们分布有多个不同的值,使用groupByKey将它们进行分组的话,就会输出只有ab的两个键与多个值的组。

与预期一致,快去试试吧~

拓展-方法参数设置

方法描述参数效果属性
keys提取键值对RDD中的键,形成新的RDD返回一个只包含键的新RDD不改变值的数量,只保留键
values提取键值对RDD中的值,形成新的RDD返回一个只包含值的新RDD不改变键的数量,只保留值
reduceByKey根据键对RDD中的值进行聚合操作,返回一个新的键值对RDD函数(用于聚合值)将具有相同键的值聚合在一起,应用提供的函数减少输出的数量,只保留唯一的键和聚合后的值
groupByKey根据键对RDD中的值进行分组,返回一个新的键值对RDD,其中值是一个迭代器将具有相同键的值分组在一起,值是一个包含所有相关值的迭代器不减少输出的数量,但将相同键的值组合在一起

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

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

相关文章

数据结构课堂考勤管理系统

摘要 高校的不断扩张让在校学生数量不断的增加,对于教师和管理人员的需求也在不断地增强,对日常的学生考勤管理的工作量也在日益增加,传统的人工点名签到的考勤管理模式已经给无法适用于当前高校考勤管理的需求,同时手动录入的考…

Spring重点知识(个人整理笔记)

目录 1. 为什么要使用 spring? 2. 解释一下什么是 Aop? 3. AOP有哪些实现方式? 4. Spring AOP的实现原理 5. JDK动态代理和CGLIB动态代理的区别? 6. 解释一下什么是 ioc? 7. spring 有哪些主要模块?…

使用c语言libexpat开源库解析XML数据

1 libexpat简介 Expat 是一个用 C 语言编写的开源 XML 解析库,以其高性能和小巧的体积著称。Expat 兼容多种操作系统平台,包括但不限于 Windows、Linux、macOS 等。由于其跨平台特性和简单易用的API,Expat 成为了许多C/C程序员解析XML文档的…

【项目实战】【Docker】【Git】【Linux】部署V2rayA项目

今天着手了一个全新领域的项目,从完全没有头绪到成功运行,记录一下具体的部署流程 github项目链接V2rayA 一开始拿到以后完全没有抓手,去阅读了一下他的帮助文档 写着能用docker运行,就去下载了一个Docker配置了一下 拉取代码到…

LeetCode-543. 二叉树的直径【树 深度优先搜索 二叉树】

LeetCode-543. 二叉树的直径【树 深度优先搜索 二叉树】 题目描述:解题思路一:DFS解题思路二:另一种写法DFS解题思路三:0 题目描述: 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任…

【35分钟掌握金融风控策略3】场景概述3

目录 ​编辑 场景概述 贷前、贷中、贷后的划分及对应的风控场景 贷前风控场景简介 预授信 授信审批 定额 定价 人工审核 场景概述 贷前、贷中、贷后的划分及对应的风控场景 在金融风控全生命周期中,贷前主要是指授信成功及之前的阶段、贷中主要是指授信成…

ubuntu18.04图形界面卡死,鼠标键盘失灵, 通过MAC共享网络给Ubuntu解决!

ubuntu18.04图形界面卡死,鼠标键盘失灵, 通过MAC共享网络给Ubuntu解决! 1. 尝试从卡死的图形界面切换到命令行界面2. 进入bios和grub页面3. 更改Grub中的设置,以进入命令行4. 在命令行页面解决图形界面卡死的问题5. Mac共享WI-FI网…

【QT+QGIS跨平台编译】056:【pdalcpp+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdalcpp介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdalcpp介绍 pdalcpp 是 PDAL(Point Data Abstraction Library)的 C++ 接口,它允许开发人员在他们的 C++ 项目中直接使用 PDAL 的功能和特性。PDAL 是一个开源的库,用于处理…

探索未来外贸电商系统的创新架构

在全球化、数字化的时代背景下,外贸电商行业呈现出蓬勃发展的态势。为了适应市场竞争的激烈和用户需求的多样化,外贸电商系统的架构设计显得尤为重要。本文将深入探讨未来外贸电商系统的创新架构,以期为行业发展提供新的思路和方向。 随着全…

IDEA2023.1.1中文插件

1.启动IDEA 选中Customize 2.选择All settings 3.选中Plugins,再搜索栏里输入Chinese,找到 "Chinese (Simplified) Language"插件,点击 Install 进行安装。 4. 安装完成后,重启IntelliJ IDEA,即可看到界面语言已经变为中文。

Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)

1. JDK 版本 (Oracle Java SE 支持路线图) 数据来源:Oracle Java SE 支持路线图 | 甲骨文中国: https://www.oracle.com/cn/java/technologies/java-se-support-roadmap.html 版本GA DatePremier Support UntilExtended Support Until(限 LTS&#xff09…

[C#]OpenCvSharp改变图像的对比度和亮度

目的 访问像素值mat.At<T>(y,x) 用0初始化矩阵Mat.Zeros 饱和操作SaturateCast.ToByte 亮度和对比度调整 g(x)αf(x)β 用α(>0)和β一般称作增益(gain)和偏置(bias)&#xff0c;分别控制对比度和亮度 把f(x)看成源图像像素&#xff0c;把g(x)看成输出图像像素…

如何利用待办事项清单提高工作效率?

你是否经常因为繁重的工作量而感到不堪重负&#xff1f;你是否在努力赶工期或经常忘记重要的电子邮件&#xff1f;你并不是特例。如何利用待办事项清单提高工作效率&#xff1f;这里有一个简单的方法可以帮你理清混乱并更高效地完成任务—待办事项清单。 这种类型的清单可以帮…

基于机器学习的木马检测模型的设计与实现(论文)_kaic

摘 要 科技的发展带来了人们生活的改变&#xff0c;近年来我国网民已突破十亿人口&#xff0c; 而且在后疫 情时代&#xff0c; 经历了疫情时期的一系列线上活动&#xff0c; 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题&#xff…

FPGA实现Canny算法(Verilog)

在边缘检测算法里面Sobel是比较简单的一个算法&#xff0c;但是其检测出来的边缘往往是比较粗的&#xff0c;效果不是很好&#xff0c;因为我们最理想的边缘肯定就是一个宽度为1的细线。 Canny算法在此基础上进行了改进&#xff0c;通过使用边缘的梯度信息进行非最大值抑制(NM…

面向作家的 ChatGPT 教程

原文&#xff1a;ChatGPT for authors 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍我坐在电脑前几个小时&#xff0c;盯着一张空白的 Word 文档。文字就是无法流畅地表达出来。这并不是什么新鲜事&#xff1b;称之为写作障碍&#xff0c;称之为缺乏灵感&#x…

大创项目推荐 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

51单片机入门_江协科技_19~20_OB记录的笔记

19. 串口通讯 19.1. 串口介绍&#xff1a; •串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。 •单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信&#xff0c;极大的…

STM32的CAN外设

我们的CAN控制器支持最高的通讯速率为1Mb/s&#xff0c;可以自动地接收和发送CAN报文&#xff0c;支持使用标准ID和扩展ID地报文&#xff0c;外设中具有3个发送邮箱&#xff0c;发送报文的优先级可以使用软件控制&#xff0c;还可以记录发送的时间&#xff0c;具有两个3级深度的…

langchain + azure chatgpt组合配置并运行

首先默认你已经有了azure的账号。 最重要的是选择gpt-35-turbo-instruct模型、api_version&#xff1a;2023-05-15&#xff0c;就这两个参数谷歌我尝试了很久才成功。 我们打开https://portal.azure.com/#home&#xff0c;点击更多服务&#xff1a; 我们点击Azure OpenAI&#…