Spark-Scala语言实战(12)

本文介绍了在ApacheSpark中使用Scala进行键值对操作的方法,包括join、rightOuterJoin、leftOuterJoin,以及keys、values、reduceByKey和groupByKey的详细示例和功能。
摘要由CSDN通过智能技术生成

在之前的文章中,我们学习了如何在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,其中值是一个迭代器将具有相同键的值分组在一起,值是一个包含所有相关值的迭代器不减少输出的数量,但将相同键的值组合在一起
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peng0426.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值