• Spark RDD之 sortBy如何全局排序?


    import org.apache.spark.sql.SparkSession
    
    import scala.util.Random
    
    object TestSortBy {
      def main(args: Array[String]): Unit = {
        val spark = SparkSession.builder().appName("app").master("local[*]").getOrCreate()
        val sc = spark.sparkContext
        val rdd = sc.parallelize(1 to 100)
        val radmomRdd = rdd.map(i => i + 34)//增加随机数
      //  radmomRdd.sortBy(i => i, true).foreach(i => print(i + ","))
    
    //    radmomRdd.sortBy(i => i, true).mapPartitionsWithIndex((idx, iter)=>{
    //      println("partitionIndex" + idx + " " + iter.mkString(","))
    //      iter
    //    }).collect()
    
        // 0. 直接sortBy,各分区内有序,全局可以看到是无序的
        radmomRdd.sortBy(i => i, false).foreach(i => print(i + ","))
        println("")
        // 1. collect方法可以将RDD类型的数据转化为数组,同时会从远程集群是拉取数据到driver端。
        // 属于先局部有序,再分区(合成1个区)
        radmomRdd.sortBy(i => i, false).collect().foreach(i => print(i + ","))
        println("")
        // 2.sortBy()函数的源码,其本质也是用到了sortByKey()函数
        radmomRdd.sortBy(i => i, false,1).foreach(i => print(i + ","))
        println("")
        // 3.
        radmomRdd.zipWithIndex().sortByKey(false,1).foreach(i => print(i._1 + ","))
        println("")
        // 4.先分区,后局部有序,效率不如上面
        //radmomRdd.repartition(1).sortBy(i => i, false).foreach(i => print(i + ","))
    
    
      }
    }
  • 相关阅读:
    POJ 1269 Intersecting Lines
    POJ 3304 Segments
    BZOJ 4591 超能粒子炮·改
    POJ 2318 TOYS/POJ 2398 Toy Storage
    BZOJ 1044 木棍分割
    BZOJ 2836 魔法树
    BZOJ 3176 Sort
    BZOJ 1668 馅饼里的财富
    Flood-it!
    Eight
  • 原文地址:https://www.cnblogs.com/sabertobih/p/13792372.html
Copyright © 2020-2023  润新知