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.mzph.cn/news/790951.shtml

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

相关文章

2023最新汽车网络安全报告汇总

2023最新汽车网络安全报告、安全参考架构及指南汇总,供大家学习参考。https://t.zsxq.com/18RkG260k 汽车信息安全法律法规及标准全景图V3.2.pdf 车载智能计算基础平台参考架构2.0.pdf 车载智能计算芯片白皮书(2023版).pdf 智能驾驶行为安全评价方法发布版.pdf 智能…

填谷式无源PFC电路

目录: 1、概述 2、原理 1、概述 如果不采用PFC,那么典型开关模式电源的功率因数约为0.6,因而会有相当大的奇次谐波失真(第三谐波有时和基本谐波一样大)。令功率因数小于1以及来自峰值负载的谐波减少了运行设备可用的实际功率。为运行这些低…

数据结构——二叉树(堆)

大家好我是小峰,今天我们开始学习二叉树。 首先我们来学习什么是树? 树概念及结构 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的…

【2024红明谷】三道Web题目的记录

红明谷 文章目录 红明谷Web1 | SOLVED LaterWeb2 | UNSOLVEDWeb3 | SOLVED 容器已经关咯,所以有些场景只能靠回忆描述啦,学习为主,题目只是一个载体~ 本次比赛学习为主,确实再一次感受到久违的web题目的魅力了,可能也是…

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF(Gramian Angular Summation Field)的方法,将一维数据转换为二维图像的步骤描述 标准化数据: 首先,对一维时序数据进行标准化处理&#xf…

MyBatis的基本应用

源码地址 01.MyBatis环境搭建 添加MyBatis的坐标 <!--mybatis坐标--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><!--mysql驱动坐…

『51单片机』蜂鸣器

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

OpenHarmony实战:轻量级系统之配置其他子系统

除上述子系统之外&#xff0c;还有一些必要但是无需进行移植的子系统。如&#xff1a;分布式任务调度子系统、DFX子系统。 这些子系统添加方式比较简单&#xff0c;在“vendor/MyVendorCompany/MyProduct/config.json”文件中进行如下配置即可&#xff1a; {"subsystem&…

专有钉钉微应用埋点以及本地调试埋点总结

最近在对接浙政钉&#xff0c;稳定性监控、通用采集 SDK、基础埋点、基础埋点&#xff0c;每次发布上去&#xff0c;工作人员那边反馈抓取不到信息 稳定性监控代码、通用采集 SDK index.html <!-- 流量稳定监控 S 关于埋点上线打开--><script src"https://wpk-…

IDEA 中能提高开发效率的插件

目录 前言 插件 Rainbow Brackets AceJump POJO to JSON Json Helper MybatisX Maven Helper PlantUML Integration TONYYI Lingma 前言 IDEA 里又很多好用的插件可以帮助我们提升开发效率&#xff0c;这里罗列下自己开发过程中常用的插件&#xff0c;善于利用插件&…

【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析

赛道一 一等奖 7% 二等奖 15% 三等奖 25% 赛道二 参考文档&#xff1a; 《第十一届大唐杯全国大学生新一代信息通信技术大赛&#xff08;产教融合5G创新应用设计&#xff09;专项赛说明.pdf》 一等奖&#xff1a;7% 二等奖&#xff1a;10% 三等奖&#xff1a;20% 赛项一&am…

unity工程输出的log在哪里?

在编辑器里进行活动输出的log位置&#xff1a; C:\Users\username\AppData\Local\Unity\Editor\Editor.log ------------------------------------ 已经打包完成&#xff0c;形成的exe运行后的log位置&#xff1a; C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目

销售与营销的区别:从手中到心中

一、引言 在商界&#xff0c;销售和营销常常被视为同义词&#xff0c;但实际上它们各自扮演着不同的角色。简而言之&#xff0c;销售是将产品送到客户手里&#xff0c;而营销则是将产品送到客户心里。这种微妙的差异对于企业的成功至关重要。正如彼得德鲁克所说&#xff1a;“…

Redis安装-Docker

安装redis的docker容器 1、创建redis挂载目录 mkdir -p /liuchaoxu/redis/{data,conf}2、复制配置文件 在 /liuchaoxu/redis/conf 目录中创建文件 redis.conf&#xff0c;文件从 redis-6.2.7.tar.gz 中解压获取 修改默认配置(从上至下依次)&#xff1a; #bind 127.0.0.1 …

游戏引擎中的物理应用

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

《QT实用小工具·十》本地存储空间大小控件

1、概述 源码放在文章末尾 本地存储空间大小控件&#xff0c;反应电脑存储情况&#xff1a; 可自动加载本地存储设备的总容量/已用容量。进度条显示已用容量。支持所有操作系统。增加U盘或者SD卡到达信号。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…

vue项目引入微信sdk: npm install weixin-js-sdk --save报错

网上查到要用淘宝的镜像 同事告知旧 域名&#xff1a;https://registry.npm.taobao.org/已经不能再使用 使用 npm config set registry http://registry.npmmirror.com

css心跳动画

图标引入 <img class"icon" src"heart.svg" alt"" srcset""> CSS代码 <style>.icon {animation:bpm 1s linear,pulse 0.75s 1s linear infinite;}keyframes pulse {from,75%,to {transform: scale(1);}25% {transform:…

极简云验证 download.php 文件读取漏洞复现

0x01 产品简介 极简云验证是一款开源的网络验证系统&#xff0c;支持多应用卡密生成&#xff1a;卡密生成 单码卡密 次数卡密 会员卡密 积分卡密、卡密管理 卡密长度 卡密封禁 批量生成 批量导出 自定义卡密前缀等&#xff1b;支持多应用多用户管理&#xff1a;应用备注 应用版…

智能仪器驱动企业数字化转型 迈向智慧未来!

在当今数字化时代&#xff0c;企业正面临着前所未有的挑战和机遇。为了在竞争激烈的市场中立足并实现可持续发展&#xff0c;数字化转型已成为企业的当务之急。智能仪器作为数字化转型的核心驱动力&#xff0c;以其卓越的性能和创新的技术&#xff0c;为企业开启了通向智慧未来…