Spark之行动算子

因为转换算子都是懒加载,并不会立即执行,遇到行动算子才执行。

目录

1.reduce()

 2.collect()

3.count()

 4.first()

 5.take()

6.takeOrdered()

7.aggregate()

8.fold()

9.countByKey()

10.save

11.foreach()


1.reduce()

聚合,f函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。

    val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)
    // 行动算子
    // reduce
    // 有分区内和分区间的计算逻辑   分区内按照元素的前后顺序计算  第一个元素作为初始值
    // 分区间不一定   按照哪个分区先算完哪个分区作为初始值
    val i: Int = listRDD.reduce(_ -_)
    println(i)

 2.collect()

        在驱动程序中,以数组Array的形式返回数据集的所有元素。

3.count()

        返回RDD中元素的个数

    //count 统计RDD的个数
    val l: Long = listRDD.count()
    println(l)

 4.first()

        返回RDD中的第一个元素

    // first取第一个元素的时候  一定取0号分区的数据
    val i: Int = listRDD.first()
    println(i)

 5.take()

        返回一个由RDD的前n个元素组成的数组

    // take能够识别具体是哪个分区的数据  从0号分区开始取数据
    val ints: Array[Int] = listRDD.take(2)
    println(ints)

6.takeOrdered()

        返回该RDD排序后的前n个元素组成的数组

    // takeOrdered
    // 先对rdd中的数据进行排序  之后再取前n个
    // 如果需要倒序排序 需要填写隐式参数
    val array: Array[Int] = listRDD.takeOrdered(3)
    val array1: Array[Int] = listRDD.takeOrdered(3) (Ordering[Int].reverse)
    println(array.toList)
    // 先取数据再排序
    val sorted: Array[Int] = listRDD.take(3).sorted
    println(sorted.toList)

7.aggregate()

        将分区内的元素按照分区内的逻辑和初始值进行聚合,然后按照分区间的逻辑和初始值聚合

    val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),4)
    val i: Int = listRDD.aggregate(10)(_-_,_-_)
    println(i)

8.fold()

        aggregate操作的简化版,分区内与分区间逻辑相同。

    // fold计算逻辑和aggregate相同  都是会使用两次初始值'
    // 分区内和分区间的计算逻辑相同
    val j: Int = listRDD.fold(10)(_ + _)
    val f: Int = listRDD.fold(10)(_ - _)
    println(j)
    println(f)

9.countByKey()

        统计每种key的个数

   val value: RDD[(String, Int)] = sc.makeRDD(
   List(("a", 10), ("b", 7), ("a", 11), ("b", 21)), 4)
   val stringToLong: collection.Map[String, Long] = value.countByKey()
   println(stringToLong)

10.save

        1.saveAsTextFile(path)保存成Text文件

        将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本。

        2.saveAsSequenceFile(path) 保存成Sequencefile文件

        将数据集中的元素以Hadoop Sequencefile的格式保存到指定的目录下,可以使HDFS或者其他Hadoop支持的文件系统。注:只有KV类型有该操作。

        3.saveAsObjectFile(path) 序列化成对象保存到文件

        用于将RDD中的元素序列化成对象,存储到文件中。

    // 保存为基础的文本文件  可以直接看懂
    value.saveAsTextFile("output")
    // saveAsSequenceFile  只能用于二元组的rdd
    value.saveAsSequenceFile("output")
    value.saveAsObjectFile("output")

11.foreach()

        遍历RDD中每一个元素

    val intRDD: RDD[Int] = sc.makeRDD(1 to 20, 5)
    // 使用collect加打印
    val ints: Array[Int] = intRDD.collect()
    ints.foreach(println)

    // 使用foreach直接打印
    // 直接在ex端进行打印  多线程打印  整体无序  分区内有序
    intRDD.foreach(println)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值