zoukankan      html  css  js  c++  java
  • 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 + ","))
    
    
      }
    }
  • 相关阅读:
    软件工程概论课后作业2
    第三周进度表
    软件工程概论课后作业1
    第二周进度表
    9.异常处理
    《构建之法》阅读笔记二
    《构建之法》阅读笔记一
    第五周进度表
    软件工程个人作业03
    第四周进度表
  • 原文地址:https://www.cnblogs.com/sabertobih/p/13792372.html
Copyright © 2011-2022 走看看