排名
需求:
/ 解决是一个各个子模块内的热度排名 --》 排名得用 sortBy ---》 (可能就是简单的排序,或者是二次排序) ---》
// 前面有一个 wordCount---》 算出次数出来 --》 考虑什么作为 key
// 算的一个网站下面,每个子模块下面的网页热度前 2 名 :
// 算的一个网站下面,每个子模块下面的网页热度前 2 名 --》 每个子模块下面的网页的次数的前 2 名
// 在实际开发中,真正代码时间可能只占 20-30% ,其他时间都在理解需求,想思路
- import java.net.URL import org.apache.spark. {
- SparkConf,
- SparkContext
- }
- object Data_anlysis { def main(args: Array[String]) { val conf = new SparkConf().setAppName("data-anysis").setMaster("local[2]") val sc = new SparkContext(conf) val linesRDD = sc.textFile("d://web_data.log") val rdd01 = linesRDD.map(line = > { val lineSplited = line.split("\t") (lineSplited(1), 1)
- }) val rdd02 = rdd01.reduceByKey(_ + _) val rdd03 = rdd02.map(tup = > { val url = tup._1; val host = new URL(url).getHost (host, url, tup._2)
- }) val rdd04 = rdd03.groupBy(_._1) val rdd05 = rdd04.mapValues(iter = > { iter.toList.sortBy(_._3).reverse.take(2)
- }) println(rdd05.collect().toBuffer) sc.stop()
- }
- }
运行结果会把网站的日志数据按照某一模块的要求列出排名前 2 个结果展示出来。
来源: http://www.bubuko.com/infodetail-2227191.html