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的迭代器为空。
相关推荐
明月看潮生11 分钟前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
Acrelhuang14 分钟前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
南宫理的日知录21 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
皓74123 分钟前
服饰电商行业知识管理的创新实践与知识中台的重要性
大数据·人工智能·科技·数据分析·零售
Mephisto.java25 分钟前
【大数据学习 | kafka高级部分】kafka的kraft集群
大数据·sql·oracle·kafka·json·hbase
Mephisto.java27 分钟前
【大数据学习 | kafka高级部分】kafka的文件存储原理
大数据·sql·oracle·kafka·json
逊嘘38 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
Half-up41 分钟前
C语言心型代码解析
c语言·开发语言
Source.Liu1 小时前
【用Rust写CAD】第二章 第四节 函数
开发语言·rust
monkey_meng1 小时前
【Rust中的迭代器】
开发语言·后端·rust