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)
    // 创建一个包含键值对的RDD
    val p = sc.parallelize(Seq(("a", 1), ("b", 2), ("c", 3), ("d", 4)))
    // 使用keys方法获取所有的键
    val p1 = p.keys
    p1.collect().foreach(println) // 输出:a, b, c, d
    // 使用values方法获取所有的值
    val p2 = p.values
    p2.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)
    // 创建一个包含键值对的RDD
    val 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,其中值是一个迭代器 将具有相同键的值分组在一起,值是一个包含所有相关值的迭代器 不减少输出的数量,但将相同键的值组合在一起

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-05 06:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-05 06:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-05 06:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-05 06:54:01       20 阅读

热门阅读

  1. 2024.3.16力扣每日一题——矩阵中移动的最大次数

    2024-04-05 06:54:01       16 阅读
  2. 算法之动态规划

    2024-04-05 06:54:01       14 阅读
  3. 搜索引擎-03-搜索引擎原理

    2024-04-05 06:54:01       11 阅读
  4. 什么是 内网穿透

    2024-04-05 06:54:01       13 阅读
  5. RabbitMQ安装详细教程

    2024-04-05 06:54:01       16 阅读
  6. git常用命令及仓库创建

    2024-04-05 06:54:01       17 阅读
  7. file 文件

    2024-04-05 06:54:01       15 阅读
  8. 为什么要学习大模型应用开发?

    2024-04-05 06:54:01       13 阅读
  9. 【R语言实战】——Logistic回归模型

    2024-04-05 06:54:01       14 阅读
  10. 力扣经典150题第二题:移除元素

    2024-04-05 06:54:01       16 阅读
  11. 排序算法-冒泡排序

    2024-04-05 06:54:01       15 阅读
  12. 4月04日,每日信息差

    2024-04-05 06:54:01       13 阅读