Spark中sortByKey和sortBy对(key,value)数据分别 根据key和value排序

    最近在用Spark分析Nginx日志,日志解析和处理完后需要根据URL的访问次数等进行排序,取得Top(10)等。

    根据对Spark的学习,知道Spark中有一个sortByKey()的函数能够完成对(key,value)格式的数据进行排序,但是,很明显,它是根据key进行排序,而日志分析完了之后,一般都是(URL,Count)的格式,而我需要根据Count次数进行排序,然后取得前10个。

     SortByKey()函数

     

    上面是SortByKey函数的源码实现。显然,该函数会对原始RDD中的数据进行Shuffle操作,从而实现排序。

    下面通过Spark-shell进行相关的测试:


val d1 = sc.parallelize(Array(("cc",12),("bb",32),("cc",22),("aa",18),("bb",16),("dd",16),("ee",54),("cc",1),("ff",13),("gg",68),("bb",4)))
d1.reduceByKey(_+_).sortBy(_._2,false).collect

    测到的测试结果如上图所示,显然是根据Key进行了排序。但是,我的需求是对Value进行排序,折腾了很久都不能达到要求。最后在QQ群里得到了大神的帮助——使用sortBy()函数。

    sortBy()函数

    

    上图是sortBy()函数的源码,其本质也是用到了sortByKey()函数,然后通过spark-shell进行测试:

val d2 = sc.parallelize(Array(("cc",32),("bb",32),("cc",22),("aa",18),("bb",6),("dd",16),("ee",104),("cc",1),("ff",13),("gg",68),("bb",44)))
d2.sortByKey(false).collect
   

    显然,上图显示的结果是根据Value中的数据进行的排序。

    至此,对(Key,Value)数据类型的数据可以根据需求分别对Key和Value进行排序了。

    大神还是挺多的,多跟别人交流(尤其是比自己牛逼的人),能受益匪浅,也能节省很多时间!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值