3.SparkCore-键值对RDD

键值对 RDD 是 Spark 中许多操作所需要的常见数据类型。 本章做特别讲解。除了在基础RDD类中定义的操作之外,Spark 为包含键值对类型的 RDD 提供了一些专有的操作 在PairRDDFunctions专门进行了定义。这些 RDD 被称为 pair RDD。RDD当中非常常见的PairRDD,也叫做键值对RDD,可以理解成KVRDD。

有很多种方式创建pair RDD,在输入输出章节会讲解。一般如果从一个普通的RDD转 为pair RDD时,可以调用map()函数来实现,传递的函数需要返回键值对。

val pairs = lines.map(x => (x.split(" ")(0), x))

1、键值对RDD的转化操作

(1)转化操作列表

 (2)聚合操作

         当数据集以键值对形式组织的时候,聚合具有相同键的元素进行一些统计操作,如:fold()、combine()、reduce()https://www.jianshu.com/p/15739e95a46e(介绍)等行动操作,pairRDD则有相应的针对键的转化操作,spark中可以组合具有相同键的值,这些操作返回RDD是转化操作。

        reduce和fold类似,就是fold需要传一个初始值。

         reduceByKey()和reduce()类似:他们都接收一个函数,并使用该函数对值进行合并。reduceByKey()会为数据集中的每个键进行并行的规约操作,每个规约操作会将键相同的值合起来。因为数据集中可能有大量的键,所以reduceByKey()没有被实现为向用户程序返回一个值得行动操作。实际上,它会返回一个由各键和对应键规约出来的结果值组成新的RDD。

        reduceByKey比groupByKey效率高,因为reduceByKey会进行预聚合。

        reduceByKey是转化算子,reduce是执行算子。

        foldByKey()则与fold相当类似:它们都是使用一个与RDD和合并函数中的数据类型相同的零值作为初始值。与fold()一样,foldByKey()操作所使用的合并函数对零值与另一个元素进行合并,结果仍为该元素(就是零与任何集合相加都不变)。

1.关于foldByKey的数值初始化:

package chapter2
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Demo {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("demo").setMaster("local[*]")
    val sc = new SparkContext(conf)
    sc.setLogLevel("WARN")

    //foldByKey:分组求和
    val rdd = sc.makeRDD(Array(("a",1),("a",5),("b",2),("c",3),("a",3),("b",5),("c",1),("c",3),("a",5),("a",5)),3)
    //看每个分区都保留了那些元素
    //两个方法的共同点在于(foreach和map):都是用于遍历集合对象,并对每一项执行指定的方法。
    //而两者的差异在于:foreach无返回值&#x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值