Spark-Scala语言实战(11)

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

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

目录

一、知识回顾

二、键值对方法

1.join

2.rightOuterJoin

3. leftOuterJoin

拓展-方法参数设置与键值对

1.方法参数设置

2.键值对


一、知识回顾

 上一篇文章中我们学习了RDD的两种方法,分别是cartesian,subtract。

cartesian可以求笛卡儿积,及两个集合的元素两两组合

    

可以看到两个集合的元素两两组合在一起了。

subtract是我们的一个补集操作。

  当p2补p1时,肯定会输出p2中没有的p1有的即我们的1,2

现在,开始今天的学习吧

二、键值对方法

1.join

  • join()方法用于根据键对两个RDD进行内连接,将两个RDD中键相同的数据的值存放在一个元组中,最后只返回两个RDD中都存在的键的连接结果。
  • 例如,在两个RDD中分别有键值对(K,V)(K,W),通过join()方法连接会返回(K,(V,W))
  • 创建两个RDD,含有相同键和不同的键,通过join()方法进行内连接。
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 p1 = sc.parallelize(Array(("A", 1), ("B", 2), ("C", 3)))// 创建第二个RDD,包含一个不同的键值对val p2 = sc.parallelize(Array(("A", 5), ("B", 3), ("d", 1)))// 执行join操作,基于键进行匹配val p3 = p1.join(p2)// 显示join后的结果p3.collect().foreach(println)}
}

可以看到我们的代码创建了两个RDD,包含相同的键A,B与不同的键C,D。那么将它们进行join连接,肯定只会匹配相同键与键的值,那即代表运行我们的代码,看到的只会是我们A,B键与它的值。现在运行代码看看是否与我们所预期的一致吧。

  

可以看到输出的分别是A,B与它们的值,所预期一致。 

2.rightOuterJoin

  • rightOuterJoin()方法用于根据键对两个RDD进行右外连接,连接结果是右边RDD的所有键的连接结果,不管这些键在左边RDD中是否存在。
  • rightOuterJoin()方法中,如果在左边RDD中有对应的键,那么连接结果中值显示为Some类型值;如果没有,那么显示为None值。
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 p1 = sc.parallelize(Array(("A", 1), ("B", 2), ("C", 3)))// 创建第二个RDD,包含一个不同的键值对val p2 = sc.parallelize(Array(("A", 5), ("B", 3), ("d", 1)))val p3 = p1.rightOuterJoin(p2)p3.collect().foreach(println)}
}

通过上面的描述可以知道rightOuterJoin方法在这里使用后,肯定是只会输出p2所包含的,p1有的p2没有就会直接忽略掉,而p2有的p1没有那么相应的输出位置就会为None值,那么在这里,肯定就会是键A,B,d了,且d里肯定有一个空(None)值。

运行代码

  

可以看到输出与预期一致。 

3. leftOuterJoin

  •   leftOuterJoin()方法用于根据键对两个RDD进行左外连接,与rightOuterJoin()方法相反,返回结果保留左边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 p1 = sc.parallelize(Array(("A", 1), ("B", 2), ("C", 3)))// 创建第二个RDD,包含一个不同的键值对val p2 = sc.parallelize(Array(("A", 5), ("B", 3), ("d", 1)))// 执行join操作,基于键进行匹配val p3 = p1.leftOuterJoin(p2)// 显示join后的结果p3.collect().foreach(println)}
}

学习了上面,那下面这个 leftOuterJoin就很好理解了,就是与上面相反,肯定是只会输出p1所包含的,p2有的p1没有就会直接忽略掉,同时也会产生空值。

  

快去试试吧~ 

拓展-方法参数设置与键值对

1.方法参数设置

方法参数参数说明使用例子效果
joinother: RDD[(K, V)]另一个需要进行连接的RDD,具有相同的键类型Krdd1.join(rdd2)返回两个RDD的键相同的元素对组成的RDD
仅包含两个RDD中都存在的键对应的元素对
rightOuterJoinother: RDD[(K, W)]另一个需要进行右外连接的RDD,具有相同的键类型Krdd1.rightOuterJoin(rdd2)返回以rdd2的键为基准的左连接结果
rdd1中与rdd2键匹配的元素对会被返回
rdd2中不与rdd1键匹配的键对应的元素对,其值会被设为null
leftOuterJoinother: RDD[(K, W)]另一个需要进行左外连接的RDD,具有相同的键类型Krdd1.leftOuterJoin(rdd2)返回以rdd1的键为基准的左连接结果
rdd1中的所有元素对都会被返回
对于rdd1中与rdd2键匹配的元素对,其值会被正常返回
对于rdd1中不与rdd2键匹配的键,其值会被设为null

2.键值对

 在 Spark 中,键值对(Key-Value Pair)通常指的是由两个元素组成的元组,其中第一个元素是键(Key),第二个元素是值(Value)。这种键值对的数据结构在 Spark 中非常常见,特别是在处理 RDD(弹性分布式数据集)时。

在 Spark 中,键值对 RDD(Pair RDD)允许你对数据进行一系列的操作,这些操作主要依赖于键。例如,你可以根据键对数据进行分组(groupByKey)、排序(sortByKey)、连接(join)、减少(reduceByKey)等。

键值对 RDD 在 Spark 中通过 scala.Tuple2 类实现,通常简写为 (K, V),其中 K 是键的类型,V 是值的类型。例如,你可以有一个 (String, Int) 类型的键值对 RDD,其中字符串是键,整数是值。

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

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

相关文章

数据结构进阶篇 之 【交换排序】(冒泡排序,快速排序递归、非递归实现)

当你觉的自己不行时,你就走到斑马线上,这样你就会成为一个行人 一、交换排序 1.冒泡排序 BubbleSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 冒泡排序的特性总结 2.快速排序 QuickSort 2.1 基本思想 2.2 递归实现 2.2.1 hoare版 2.2.2 …

【JAVASE】面向对象程序三大特性之一( 封装)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉\n 🍎个人主页:再无B~U~G-CSDN博客 目标: 1.包的使用 2.static关键字的使用 3.代码…

苹果手表Apple Watch录了两个半小时的录音,却只能播放4秒,同步到手机也一样,还能修复好吗?

好多人遇到这个情况,用苹果手表Apple Watch录音,有的录1个多小时,有的录了3、4小时,甚至更长时间,因为手表没电,忘记保存等原因造成录音损坏,都是只能播放4秒,同步到手机也一样&…

游戏引擎中的物理应用

一、 角色控制器 Character Controller和普通的动态对象(Dynamic Actor )是不同的,主要的三个特点是: 它拥有可控制的刚体间的交互假设它是有无穷的摩擦力(可以站停在位置上),没有弹性加速和刹车几乎立即…

【Django学习笔记(三)】BootStrap介绍

BootStrap介绍 前言正文1、BootStrap 快速了解2、初识BootStrap2.1 下载地址2.2 创建目录2.3 引入BootStrap2.4 使用BootStrap 3、BootStrap 组件&样式3.1 导航条3.2 栅格系统3.3 container3.3.1 container3.3.2 container-fluid 3.4 面板3.5 媒体对象3.6 分页3.7 图标3.7.…

外卖配送时间预测项目

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 项目背景 外卖服务的兴起: 随着互联网技术和移动应用的发展,外卖成为一种日益普及的餐饮服务方式。顾客通过餐厅、杂货店的网站或移…

Qt中继承QCheckBox的类结合QTableWidget实现多选并且每个多选的id都不一样

1.相关描述 继承QCheckBox的类MyCheckBox&#xff0c;利用QTableWidget的setCellWidget方式添加MyCheckBox类的对象 2.相关页面 3.相关代码 mycheckbox.h #ifndef MYCHECKBOX_H #define MYCHECKBOX_H#include <QCheckBox> #include <QObject>class MyCheckBox : pu…

计算机网络:数据链路层 - 封装成帧 透明传输 差错检测

计算机网络&#xff1a;数据链路层 - 封装成帧 & 透明传输 & 差错检测 数据链路层概述封装成帧透明传输差错检测 数据链路层概述 从数据链路层来看&#xff0c;主机 H1 到 H2 的通信可以看成是在四段不同的链路上的通信组成的&#xff0c;所谓链路就是从一个节点到相邻…

从0到1构建uniapp应用-store状态管理

背景 在 UniApp的开发中&#xff0c;状态管理的目标是确保应用数据的一致性&#xff0c;提升用户体验&#xff0c;并简化开发者的工作流程。通过合理的状态管理&#xff0c;可以有效地处理用户交互、数据同步和界面更新等问题。 此文主要用store来管理用户的登陆信息。 重要…

数据结构——图的应用(最小生成树,最短路径,拓扑排序,关键路径)

目录 1.最小生成树 1.概念回顾——生成树 2.最小生成树概念 2.构造最小生成树 1.MST性质 2.Prim算法 3.Kruskal 算法 4.两种算法比较 3.最短路径 1.两点间最短路径 2.某源点到其它各点最短路径 3.单源最短路径——用Dijkstra算法 4.所有顶点间的最短路径…

QML嵌套页面的实现学习记录

StackView是一个QML组件&#xff0c;用于管理和显示多个页面。它提供了向前和向后导航的功能&#xff0c;可以在堆栈中推入新页面&#xff0c;并在不需要时将页面弹出。 ApplicationWindow {id:rootvisible: truewidth: 340height: 480title: qsTr("Stack")// 抽屉:…

【GlobalMapper精品教程】073:像素到点(Pixels-to-Points)从无人机图像轻松生成点云

文章目录 一、工具介绍二、生成点云三、生成正射四、生成3D模型五、注意事项一、工具介绍 Global Mapper v19引入的新的像素到点工具使用摄影测量原理,从重叠图像生成高密度点云、正射影像及三维模型。它使LiDAR模块成为已经功能很强大的的必备Global Mapper扩展功能。 打开…

Linux的中间件

我们先补充点关于awk的内容 awk的用法其实很广。 $0 表示整条记录 变量&#xff1a; NF 一行中有多少个字段&#xff08;表示字段数&#xff09; NR &#xff1a; 代表当前记录的序号&#xff0c;从1开始计数。每读取一条记录&#xff0c;NR的值就会自动增加1。&#xff08;…

编程生活day6--回文子串、蛇形填充数组、笨小猴、单词排序

回文子串 题目描述 给定一个字符串&#xff0c;输出所有长度至少为2的回文子串。 回文子串即从左往右输出和从右往左输出结果是一样的字符串&#xff0c;比如&#xff1a;abba&#xff0c;cccdeedccc都是回文字符串。 输入 一个字符串&#xff0c;由字母或数字组成。长度5…

【设计原则】CQRS

文章目录 概述组成与特点优缺点何时使用 CQRS 模式推荐阅读 概述 CQRS&#xff08;Command Query Responsibility Segregation&#xff09;是一种软件设计模式&#xff0c;其核心设计理念是将一个对象的数据访问&#xff08;查询&#xff09;和数据操作&#xff08;命令&#…

显示器and拓展坞PD底层协商

简介&#xff1a; PD显示器或者PD拓展坞方案中&#xff0c;连接显示设备的Type-C端口主要运行在DRP模式&#xff0c;在此模式下可以兼容Source&#xff08;显卡&#xff09;、Sink&#xff08;信号器&#xff09;、DRP&#xff08;手机、电脑&#xff09;模式的显示设备。 Sou…

探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;探索设计模式的魅力&#xff1a;揭秘B/S…

ArcGIS Pro导出布局时去除在线地图水印

目录 一、背景 二、解决方法 一、背景 在ArcGIS Pro中经常会用到软件自带的在线地图&#xff0c;但是在导出布局时&#xff0c;图片右下方会自带地图的水印 二、解决方法 解决方法&#xff1a;添加动态文本--服务图层制作者名单&#xff0c;然后在布局中选定位置添加 在状…

【星计划★C语言】c语言初相识:探索编程之路

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;星计划★C语言、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 &#x1f514;数据单位2.2 &…

【ARM 嵌入式 C 常用数据结构系列 25 -- container_of 宏 使用介绍】

文章目录 container_of 宏container_of 宏的定义container_of 使用示例应用场景总结 container_of 宏 在Linux内核编程中&#xff0c;container_of宏是一个非常有用的工具&#xff0c;它允许开发者从指向结构体中某个成员的指针反向获得包含它的完整结构体的指针。这在实现基于…