您的位置:首页 > 产品设计 > UI/UE

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

2016-09-23 10:30 1181 查看
    最近在用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进行排序了。

    大神还是挺多的,多跟别人交流(尤其是比自己牛逼的人),能受益匪浅,也能节省很多时间!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark 排序