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函数的源码实现。显然,该函数会对原始RDD中的数据进行Shuffle操作,从而实现排序。
下面通过Spark-shell进行相关的测试:
测到的测试结果如上图所示,显然是根据Key进行了排序。但是,我的需求是对Value进行排序,折腾了很久都不能达到要求。最后在QQ群里得到了大神的帮助——使用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的学习,知道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中sortByKey和sortBy对(key,value)数据分别 根据key和value排序
- 大数据Spark “蘑菇云”行动第40课:Spark编程实战之aggregateByKey、reduceByKey、groupByKey、sortByKey深度解密
- 大数据:Spark 算子(一)排序算子sortByKey来看大数据平台下如何做排序
- Erlang静态键值对(key-value)数据分别写入erl文件与ETS表读取的测试
- Spark程序使用groupByKey后数据存入HBase出现重复的现象
- spark源码解读4之SortByKey
- Spark算子--SortByKey
- MyBatis根据Map中key作为字段名,value作为字段值修改数据
- SPARK:sortByKey和sortBy 函数讲解
- 大数据Spark “蘑菇云”行动第89课:Hive中GroupBy优化、Join的多种类型实战及性能优化、OrderBy和SortBy、UnionAll等实战和优化
- Spark取出(Key,Value)型数据中Value值为前n条数据
- Map排序,获取map的第一值,根据value取key等操作(数据预处理)
- Spark-RDD 之 排序sortBy 和sortByKey
- Spark:sortBy和sortByKey的函数详解
- java 根据值获得键(map get key by value)
- c++ map sort by value and sort by key(字典的遍历)
- spark sortByKey
- Spark: sortBy和sortByKey函数详解
- 大数据IMF传奇行动绝密课程第93课:SparkStreaming updateStateByKey案例实战和内置源码解密
- 【spark】sortByKey实现二次排序