Spark-Scala语言实战(12)

在之前的文章中,我们学习了如何在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)// 创建一个包含键值对的RDDval p = sc.parallelize(Seq(("a", 1), ("b", 2), ("c", 3), ("d", 4)))// 使用keys方法获取所有的键val p1 = p.keysp1.collect().foreach(println) // 输出:a, b, c, d// 使用values方法获取所有的值val p2 = p.valuesp2.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)// 创建一个包含键值对的RDDval 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.mzph.cn/news/792950.shtml

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

相关文章

攻防世界 xff_referer 题目解析

xff_referer 一:了解xxf和Referer X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 一般的客户端发送HTTP请求没有X-Forwarded-For头的&#xff0…

宁波ISO27001认证:信息安全管理的黄金标准

😃宁波ISO27001认证:🤖信息安全管理的💡黄金标准 随着信息技术💻的迅猛发展,信息安全🔏问题日益凸显,成为企业🏬稳定运营和持续发展的📊关键因素。在这样&am…

Finite Element Procedures K.J.Bathe 【教材pdf+部分源码】|有限元经典教材 | 有限元编程

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

Paddle实现人脸对比

人脸对比 人脸对比,顾名思义,就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS:作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集: 人脸数据_数据集-飞桨AI Studio星河社区 (b…

[C#]OpenCvSharp使用HoughCircles霍夫圆检测算法找出圆位置并计数

【效果展示】 原图: 找出位置: 【测试环境】 vs2019,netframework4.7.2,opencvsharp4.8.0 【函数用法】 cv2提供了一种圆检测的方法:HoughCircles。该函数的返回结果与参数设置有很大的关系。 检测的图像时9枚钱币,分别使用了…

特征融合篇 | 结合内容引导注意力 DEA-Net 思想 实现双主干特征融合新方法 | IEEE TIP 2024

本篇改进已集成到 YOLOv8-Magic 框架。 摘要—单幅图像去雾是一个具有挑战性的不适定问题,它从观察到的雾化图像中估计潜在的无雾图像。一些现有的基于深度学习的方法致力于通过增加卷积的深度或宽度来改善模型性能。卷积神经网络(CNN)结构的学习能力仍然未被充分探索。本文…

SpringAI如何集成Ollama开发AI应用

文章目录 spring AI 介绍1. Spring ML2. Spring Data3. Spring Integration4. Spring Boot5. Spring Cloud如何开始使用 Spring AI注意事项 Spring AI集成Ollama1. 添加依赖2. 配置应用3. 注入和使用 AiClient4. 运行和测试注意事项 spring AI 介绍 Spring AI 是一个基于 Spri…

技术人的清明节:数字哀思与虚拟纪念

清明节,这是一个寄托哀思、缅怀先人的日子。对于我们这些日夜与代码为伴的技术人来说,这个节日不仅仅是对亲人的怀念,更是一次对生命、时间和记忆的深刻反思。 技术人的情感表达:独特而真挚 我们技术人,常被误解为情…

【算法题】换水问题 II

> 插:AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家…

代理模式:全局 规则 直连 脚本四种模式的区别

当涉及到网络代理时,不同模式具有不同的设置,选择不同模式应根据实际需求和网络环境来决定。 代理模式的区别如下: 1. 全局模式 整个设备的所有流量都会通过代理服务器转发。无论是浏览器、应用程序还是系统其他组件,都将通过代理…

Linux第3课 Linux系统安装及换源方法

文章目录 Linux第3课 Linux系统安装及换源方法一、VMware虚拟机下系统的安装及配置(一)创建新的虚拟机 二、换源三、初次配置四、修改分辨率五、共享文件夹的实现(一)创建并查看共享文件夹 Linux第3课 Linux系统安装及换源方法 用…

阿里云PAI + pytorch大语言模型开发环境简介

文章目录 阿里云PAI pytorch大语言模型开发环境简介PAI-DSW 快速入门1. 安装和配置2. 模型训练2.1 数据集准备2.2 模型训练脚本准备2.3 提交训练作业 3. 部署模型为推理服务4. 调用推理服务 阿里云PAI pytorch大语言模型开发环境简介 PAI-DSW 快速入门 阿里云机器学习PAI&a…

Node.js 与 webpack(四)

上一篇:Node.js与webpack(三)-CSDN博客 webpack原理 yu 优化 本章节主要介绍 Webpack 高级配置。 所谓高级配置其实就是进行 Webpack 优化,让我们代码在编译/运行时性能更好~ 我们会从以下角度来进行优化: 提升开发体…

如何在 Ubuntu 12.04 VPS 上使用 LDAP 对客户端计算机进行身份验证

简介 LDAP(轻量级目录访问协议)是将认证信息保存在单一集中位置的一种方式。在之前的一篇文章中,我们讨论了如何在 Ubuntu 12.04 VPS 上设置 LDAP 服务器。这解释了实际的服务器配置。 在本文中,我们将讨论如何配置客户端机器以远…

Data-efficient Fine-tuning for LLM-based Recommendation

目录 Introduction 利用大型语言模型(LLM)进行推荐最近引起了相当大的关注,其中微调在 LLM 的适应中发挥着关键作用。然而,在快速扩展的推荐数据上微调LLMs的成本限制了其实际应用。为了应对这一挑战,小样本微调提供了…

【深入理解计算机系统第3版】有符号数和无符号数转换以及移位运算练习题2.23

题目 考虑下面的C函数&#xff1a; int fun1(unsigned word) {return (int) ((word << 24) >> 24); }int fun2(unsigned word) {return ((int) word << 24) >> 24; } 假设一个采用补码运算的机器上以32位程序来执行这些函数。还假设有符号数值的右移…

代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

文章目录 前言1、Bluecms-CNVD-1Day-常规注入审计分析2、emlog-CNVD-1Day-常规注入审计分析3、emlog-CNVD-1Day-2次注入审计分析 前言 挖掘技巧&#xff1a; -语句监控-数据库SQL监控排查可利用语句定向分析 -功能追踪-功能点文件SQL执行代码函数调用链追踪 -正则搜索-(update…

QT----opencv4.8.0编译cuda版本,QTcreater使用

目录 1 编译opencv4.8.02 验证能否加载GPU cuda12.1 opencv4.8.0 vs2019 cmake3.29 1 编译opencv4.8.0 打开cmake&#xff0c;选择opencv480路径&#xff0c;build路径随意 点击configure后&#xff0c;选择这些选项&#xff0c;opencv_word&#xff0c;cuda全选&#xff0c;…

工业组态 物联网组态 组态编辑器 web组态 组态插件 编辑器

体验地址&#xff1a;by组态[web组态插件] BY组态是一款非常优秀的纯前端的【web组态插件工具】&#xff0c;可无缝嵌入到vue项目&#xff0c;react项目等&#xff0c;由于是原生js开发&#xff0c;对于前端的集成没有框架的限制。同时由于BY组态只是一个插件&#xff0c;不能独…

【Linux】Ubuntu 文件权限管理

Linux 系统对文件的权限有着严格的控制&#xff0c;用于如果相对某个文件执行某种操作&#xff0c;必须具有对应的权限方可执行成功&#xff0c;这也是Linux有别于Windows的机制&#xff0c;也是基于这个权限机制&#xff0c;Linux可以有效防止病毒自我运行。因为运行的条件是必…