ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spark排序之SortBy

2022-04-29 17:32:25  阅读:188  来源: 互联网

标签:bb val SortBy sc new Spark 排序 sorts


1、例子1:按照value进行降序排序

def sortBy[K]( f: (T) => K,

      ascending: Boolean = true, // 默认为正序排列,从小到大,false:倒序

      numPartitions: Int = this.partitions.length)

      (implicit ord: Ordering[K], ctag: ClassTag[K]): RDD[T]

返回值是T,数字不会变
package  com.test.spark
import  org.apache.spark.{SparkConf, SparkContext}
 
/**
   * @author admin
   * SortBy是SortByKey的增强版
   * 按照value进行排序
   */
object  SparkSortByApplication {
 
   def  main(args :  Array[String]) :  Unit  =  {
     val  conf  =  new  SparkConf().setAppName( "SortSecond" ).setMaster( "local[1]" )
     val  sc  =  new  SparkContext(conf)
     val  datas  =  sc.parallelize(Array(( "cc" , 12 ),( "bb" , 32 ),( "cc" , 22 ),( "aa" , 18 ),( "bb" , 16 ),( "dd" , 16 ),( "ee" , 54 ),( "cc" , 1 ),( "ff" , 13 ),( "gg" , 32 ),( "bb" , 4 )))
     // 统计key出现的次数
     val  counts  =  datas.reduceByKey( _ + _ )
     // 按照value进行降序排序
     val  sorts  =  counts.sortBy( _ . _ 2 , false )
     sorts.collect().foreach(println) 
sc.stop() } }
输出结果:

(ee,54)
(bb,52)
(cc,35)
(gg,32)
(aa,18)
(dd,16)
(ff,13)

2、例子2:先按照第一个元素升序排序,如果第一个元素相同,再进行第三个元素进行升序排序

package  com.sudiyi.spark
import  org.apache.spark.{SparkConf, SparkContext}
 
/**
   * @author xubiao
   * SortBy是SortByKey的增强版
   * 先按照第一个,再按照第三个元素进行升序排序
   */
object  SparkSortByApplication {
 
   def  main(args :  Array[String]) :  Unit  =  {    
     val  conf  =  new  SparkConf().setAppName( "SortSecond" ).setMaster( "local[1]" )
     val  sc  =  new  SparkContext(conf)
     val  arr  =  Array(( 1 ,  6 ,  3 ), ( 2 ,  3 ,  3 ), ( 1 ,  1 ,  2 ), ( 1 ,  3 ,  5 ), ( 2 ,  1 ,  2 ))
     val  datas 2  =  sc.parallelize(arr)
     val  sorts 2  =  datas 2 .sortBy(e  = > (e. _ 1 ,e. _ 2 ))
     sorts 2 .collect().foreach(println)
     sc.stop()
   }
}
输出结果:

(1,1,2)
(1,3,5)
(1,6,3)
(2,1,2)
(2,3,3)

 

标签:bb,val,SortBy,sc,new,Spark,排序,sorts
来源: https://www.cnblogs.com/JYB2021/p/16207466.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有