美文网首页
用Spark实现多种方式的排序

用Spark实现多种方式的排序

作者: 不愿透露姓名的李某某 | 来源:发表于2019-07-22 08:48 被阅读0次

方式一:

package Day05

import org.apache.spark.rdd.RDD

import org.apache.spark.{SparkConf, SparkContext}

object Sortcust01 {

def main(args: Array[String]): Unit = {

val conf=new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)

val sc=new SparkContext(conf)

//排序,首先按照颜值的降序,如果颜值相等,再按照年龄的升序

    val users=Array("laoduan 30 99","laozhao 88 99 ","laoyang 12 454")

//将Driver端的数据并行化变成RDD

    val lines = sc.parallelize(users)

val lmap: RDD[User] = lines.map(t => {

val sp = t.split(" ")

val name = sp(0)

val age = sp(1).toInt

val yan = sp(2).toInt

new User(name,age,yan)

})

//将RDD里面装的User类型的数据进行排序

    val lsort: RDD[User] =lmap.sortBy (u => u)

val res = lsort.collect()

println(res.toBuffer)

sc.stop()

}

}

class User(val name:String,val age:Int,val nian:Int)extends Ordered[User]with Serializable {

override def compare(that: User): Int = {

if(this.nian==that.nian){

this.age-that.age

}else{

-(this.nian-that.nian)

}

}

override def toString:String =s"name: $name,age:$age,nian:$nian"

}

方式二

package Day05

import org.apache.spark.rdd.RDD

import org.apache.spark.{SparkConf, SparkContext}

object Sortcust02 {

def main(args: Array[String]): Unit = {

val conf=new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)

val sc=new SparkContext(conf)

//排序,首先按照颜值的降序,如果颜值相等,再按照年龄的升序

    val users=Array("laoduan 30 99","laozhao 88 99 ","laoyang 12 454")

//将Driver端的数据并行化变成RDD

    val lines = sc.parallelize(users)

val lmap: RDD[(String,Int,Int)] = lines.map(t => {

val sp = t.split(" ")

val name = sp(0)

val age = sp(1).toInt

val yan = sp(2).toInt

(name,age,yan)

})

//排序(传入了一个排序规则,不会改变数据的格式,只会改变顺序)

    val lsort =lmap.sortBy (tp =>new  Boy(tp._2,tp._3))

println(lsort.collect().toBuffer)

sc.stop()

}

}

class Boy(val age:Int,val nian:Int)extends Ordered[Boy]with Serializable {

override def compare(that: Boy): Int = {

if(this.nian==that.nian){

this.age-that.age

}else{

-(this.nian-that.nian)

}

}

}

方式三:

package Day05

import org.apache.spark.rdd.RDD

import org.apache.spark.{SparkConf, SparkContext}

object Sortcust03{

def main(args: Array[String]): Unit = {

val conf=new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)

val sc=new SparkContext(conf)

//排序,首先按照颜值的降序,如果颜值相等,再按照年龄的升序

    val users=Array("laoduan 30 99","laozhao 88 99 ","laoyang 12 454")

//将Driver端的数据并行化变成RDD

    val lines = sc.parallelize(users)

val lmap: RDD[(String,Int,Int)] = lines.map(t => {

val sp = t.split(" ")

val name = sp(0)

val age = sp(1).toInt

val yan = sp(2).toInt

(name,age,yan)

})

//排序(传入了一个排序规则,不会改变数据的格式,只会改变顺序)

    val lsort =lmap.sortBy (tp =>new  Man(tp._2,tp._3))

println(lsort.collect().toBuffer)

sc.stop()

}

}

case  class Man( age:Int, nian:Int)extends Ordered[Man]  {

override def compare(that: Man): Int = {

if(this.nian==that.nian){

this.age-that.age

}else{

-(this.nian-that.nian)

}

}

}

方式四:

package Day05

import org.apache.spark.rdd.RDD

import org.apache.spark.{SparkConf, SparkContext}

object Sortcust04{

def main(args: Array[String]): Unit = {

val conf=new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)

val sc=new SparkContext(conf)

//排序,首先按照颜值的降序,如果颜值相等,再按照年龄的升序

    val users=Array("laoduan 30 99","laozhao 88 99 ","laoyang 12 454")

//将Driver端的数据并行化变成RDD

    val lines = sc.parallelize(users)

val lmap: RDD[(String,Int,Int)] = lines.map(t => {

val sp = t.split(" ")

val name = sp(0)

val age = sp(1).toInt

val yan = sp(2).toInt

(name,age,yan)

})

import  SortRules.Orderingxianrou

//排序(传入了一个排序规则,不会改变数据的格式,只会改变顺序)

    val lsort =lmap.sortBy (tp =>new  Xianr(tp._2,tp._3))

println(lsort.collect().toBuffer)

sc.stop()

}

}

case  class Xianr( age:Int, nian:Int)

package Day05

object SortRules {

implicit  object Orderingxianrouextends Ordering[Xianr] {

override def compare(x: Xianr, y: Xianr): Int = {

if(x.nian==y.nian){

x.age-y.age

}else{

y.nian-x.nian

}

}

}

}

方式五:

package Day05

import org.apache.spark.rdd.RDD

import org.apache.spark.{SparkConf, SparkContext}

object Sortcust05{

def main(args: Array[String]): Unit = {

val conf=new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)

val sc=new SparkContext(conf)

//排序,首先按照颜值的降序,如果颜值相等,再按照年龄的升序

    val users=Array("laoduan 30 99","laozhao 88 99 ","laoyang 12 454")

//将Driver端的数据并行化变成RDD

    val lines = sc.parallelize(users)

val lmap: RDD[(String,Int,Int)] = lines.map(t => {

val sp = t.split(" ")

val name = sp(0)

val age = sp(1).toInt

val yan = sp(2).toInt

(name,age,yan)

})

//充分利用元祖的规则,先比第一个,相等比第二个

    val lsort =lmap.sortBy (tp =>(-tp._3,tp._2))

println(lsort.collect().toBuffer)

sc.stop()

}

}

方式六:

package Day05

import org.apache.spark.rdd.RDD

import org.apache.spark.{SparkConf, SparkContext}

object Sortcust06 {

def main(args: Array[String]): Unit = {

val conf=new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)

val sc=new SparkContext(conf)

//排序,首先按照颜值的降序,如果颜值相等,再按照年龄的升序

    val users=Array("laoduan 30 99","laozhao 88 99 ","laoyang 12 454")

//将Driver端的数据并行化变成RDD

    val lines = sc.parallelize(users)

val lmap: RDD[(String,Int,Int)] = lines.map(t => {

val sp = t.split(" ")

val name = sp(0)

val age = sp(1).toInt

val yan = sp(2).toInt

(name,age,yan)

})

//    Ordering[(Int,Int)]最终比较的规则样式

//    on[(String,Int,Int)]未比较前的规则样式

//    (t=>(-t._3,t._2))怎样将规则转换成想要的格式

implicit  val  Rules=Ordering[(Int,Int)].on[(String,Int,Int)](t=>(-t._3,t._2))

val lsort =lmap.sortBy (tp =>tp)

println(lsort.collect().toBuffer)

sc.stop()

}

}

相关文章

  • 用Spark实现多种方式的排序

    方式一: package Day05 import org.apache.spark.rdd.RDD import...

  • 每日Android源码设计模式之-6、策略模式

    当我们在实现一个功能的时候,有很多种的实现方式,比如说排序算法,有快速排序、冒泡排序、插入排序等等。可能我们的做法...

  • 169、Spark运维管理进阶之作业监控通过Spark Web

    对于Spark作业的监控,Spark给我们提供了很多种方式:Spark Web UI,Spark History ...

  • Spark Streaming 实现原理

    Spark Streaming 实现思路 Spark Streaming 与 Spark Core 的关系可以用下...

  • Spark介绍

    Spark 是什么 Spark 是一个用来实现快速而通用的集群计算的平台。Spark 适用于各种各样原先需要多种不...

  • js排序总结

    用sort()方法实现数字英文排序,用localeCompare()方法实现中文排序。 一、定义 sort():用...

  • spark中实现排序

    第一种方式: 第二种方式 第三种方式 第四种方式: 第五种规则 第六种

  • 堆排序学习总结

    本文摘抄总结于《算法》 我们可以把任意优先队列变成一种排序方法。而优先队列有多种实现方式,如无序数组实现的最小优先...

  • 来,咱们聊聊排序

    排序在计算周期中占有很大的比重,其实现方法也是多种多样,如选择排序、插入排序、希尔排序、归并排序、快速排序、冒泡排...

  • 2018-12-10 电商Spark笔记 1.1 简介

    1. 使用到的技术:Spark Core、 SparkSql、Spark Streaming 2. 实现的业务:用...

网友评论

      本文标题:用Spark实现多种方式的排序

      本文链接:https://www.haomeiwen.com/subject/tuzblctx.html