Spark-Scala语言实战(14)

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

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

目录

一、知识回顾

二、键值对方法

1.lookup

2.cogroup

拓展-方法参数设置


一、知识回顾

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

fullOuterJoin是我们的全外连接,保留两个RDD中所有键与它的值的连接结果。

zip方法用于将两个RDD组合成键值对RDD

combineByKey()方法就比较复杂了,推荐还是去上一篇文章中复习一下,这边展示一下用法。

现在开始今天的学习吧~

二、键值对方法

1.lookup

  • lookup(key:K)方法作用于键值对RDD,返回指定键的所有值。
Scala 复制代码
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(("key1", "value1"), ("key2", "value2"), ("key3", "value3"))).collectAsMap()
    // 创建另一个RDD,其中我们想要查找键对应的值
    val pp = sc.parallelize(Seq("key1", "key2", "key4"))
    // 使用map和lookupMap实现lookup功能
    val ppp= pp.map(key => (key, p.get(key)))
    // 收集结果并打印
    ppp.collect().foreach(println)
  }
}

我们创建了两个RDD一个名为p包含了我们的键值对,一个名为pp包含了我们需要查找的键。然后使用 map来实现我们的lookoup方法。

通过运行结果,我们可以看出返回了我们需要的key1,2,4但是key4中没有值,他就返回为None

2.cogroup

  • cogroup是一种常见的join操作,用于合并两个或多个数据组中具有相同键的数据。
Scala 复制代码
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 p1 = sc.parallelize(Seq(("a", 1), ("b", 2), ("a", 3)))
    val p2 = sc.parallelize(Seq(("a", 4), ("b", 5), ("c", 6)))
    // 使用 cogroup 方法将两个 RDD 中具有相同键的元素组合在一起
    val pp = p1.cogroup(p2)
    // 收集结果并打印
    pp.collect().foreach(println)
  }
}

通过代码可以看到我们创建了两个RDD, 使用cogroup方法将它们相同键的数据进行合并,那么ac都是共同的元素,可是却没有c,运行代码还是会和之前的方法一样返回None吗?运行代码看看结果。

可以看到和以往不同,这次直接没有返回。

快去试试吧。

拓展-方法参数设置

方法 参数 描述 例子
lookup key 在给定的键值对RDD中查找指定的键对应的值。 假设有一个键值对RDD:rdd = sc.parallelize([(1, 'a'), (2, 'b'), (3, 'c')]),则rdd.lookup(1)将返回['a']
如果键不存在,则返回空列表。 rdd.lookup(4)将返回[]
cogroup 其他RDDs 对多个RDD中的相同键进行分组,并返回一个新的键值对RDD,其中键是原始键,值是来自不同RDD的迭代器列表。 假设有两个RDD:rdd1 = sc.parallelize([(1, 'a'), (2, 'b')])rdd2 = sc.parallelize([(1, 'x'), (3, 'y')]),则rdd1.cogroup(rdd2)将返回[(1, (<iterator at 0x7f...>, <iterator at 0x7f...>)), (2, (<iterator at 0x7f...>,)), (3, (, <iterator at 0x7f...>))]
迭代器列表中的每个迭代器对应一个输入RDD,并按输入RDD的顺序排列。 在上面的例子中,对于键1,第一个迭代器包含rdd1中的值'a',第二个迭代器包含rdd2中的值'x'
如果某个键在某个RDD中不存在,则对应的迭代器为空。 在上面的例子中,对于键2,只有来自rdd1的迭代器包含值'b',而来自rdd2的迭代器为空。同样地,对于键3,只有来自rdd2的迭代器包含值'y',而来自rdd1的迭代器为空。
相关推荐
武子康几秒前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
极客代码1 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
土豆湿7 分钟前
拥抱极简主义前端开发:NoCss.js 引领无 CSS 编程潮流
开发语言·javascript·css
界面开发小八哥14 分钟前
更高效的Java 23开发,IntelliJ IDEA助力全面升级
java·开发语言·ide·intellij-idea·开发工具
时差95314 分钟前
Flink Standalone集群模式安装部署
大数据·分布式·flink·部署
锵锵锵锵~蒋17 分钟前
实时数据开发 | 怎么通俗理解Flink容错机制,提到的checkpoint、barrier、Savepoint、sink都是什么
大数据·数据仓库·flink·实时数据开发
二进制_博客18 分钟前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink
大数据编程之光21 分钟前
Flink入门介绍
大数据·flink
长风清留扬29 分钟前
一篇文章了解何为 “大数据治理“ 理论与实践
大数据·数据库·面试·数据治理
Mephisto.java30 分钟前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache