设为首页 加入收藏

TOP

spark两种自定义排序方式
2019-02-08 01:29:17 】 浏览:68
Tags:spark 定义 排序 方式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bokzmm/article/details/79842936

一、目标对象添加隐式转换函数的方式实现自定义排序

object MySort{
  //为student类添加隐式转换函数
  implicit val stuOrdering = new Ordering[student]{
    override def compare(x: student, y: student) = {
      //自定义排序格式为:默认按年龄升序排序,当年龄相同时,按分数降序排序
      if(x.age != y.age){
        x.age - y.age
      }else{
        y.score - x.score
      }
    }
  }
}

/**
  * 隐式转换函数实现自定义排序
  */
object CustomSort1{
  def main(args: Array[String]): Unit = {
    //1.创建配置对象
    val conf = new SparkConf().setAppName("sort1").setMaster("local[2]");
    //2.创建集群入口类对象
    val sc = new SparkContext(conf);

    //3.并行化的方式生成rdd
    val rdd = sc.parallelize(Array(("tom",24,92),("ko",24,97),("mark",28,88),("jack",18,86)))

    //4.对数据进行排序
    //引入隐式转换函数
    import MySort.stuOrdering
    val resRdd = rdd.sortBy(x => student(x._1,x._2.toInt,x._3.toInt))

    //5.打印排序后的结果数据
    println(resRdd.collect().toBuffer)


  }
}
//学生类
case class student(name:String,age:Int,score:Int)

二、目标对象实现Ordered特质的方式实现自定义排序

object CustomSort2{
  def main(args: Array[String]): Unit = {
    //1.创建配置对象
    val conf = new SparkConf().setAppName("sort2").setMaster("local[2]");
    //2.创建集群入口类对象
    val sc = new SparkContext(conf);

    //3.并行化的方式生成rdd
    val rdd = sc.parallelize(Array(("tom",24,92),("ko",24,97),("mark",28,88),("jack",18,86)))

    //4.对数据进行排序
    val resRdd = rdd.sortBy(x => student2(x._1,x._2.toInt,x._3.toInt))

    //5.打印排序后的结果数据
    println(resRdd.collect().toBuffer)

  }
}

case class student2(name:String,age:Int,score:Int) extends Ordered[student2]{

  override def compare(that: student2): Int = {
    if(this.age != that.age){
      this.age - that.age
    }else{
      that.score - this.score
    }
  }
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spark 本地调试运行 下一篇Spark部分:几个重要的端口汇总

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目