Spark SQL案例:分组排行榜
生活随笔
收集整理的這篇文章主要介紹了
Spark SQL案例:分组排行榜
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、提出任務
- 分組求TopN是大數(shù)據(jù)領域常見的需求,主要是根據(jù)數(shù)據(jù)的某一列進行分組,然后將分組后的每一組數(shù)據(jù)按照指定的列進行排序,最后取每一組的前N行數(shù)據(jù)。
- 有一組學生成績數(shù)據(jù)
- 張三豐 90
李孟達 85
張三豐 87
王曉云 93
李孟達 65
張三豐 76
王曉云 78
李孟達 60
張三豐 94
王曉云 97
李孟達 88
張三豐 80
王曉云 88
李孟達 82
王曉云 98
同一個學生有多門成績,現(xiàn)需要計算每個學生分數(shù)最高的前3個成績,期望輸出結(jié)果如下所示:
- 張三豐:94 90 87
李孟達:88 85 82
王曉云:98 97 93
預備工作:啟動集群的HDFS與Spark
-
?將成績文件 - grades.txt上傳到HDFS上/input目錄
-
二、完成任務
(一)新建Maven項目
- 設置項目信息(項目名、保存位置、組編號、項目編號)
-
?
?將java目錄改成scala目錄
-
(二)添加相關依賴和構(gòu)建插件
- 在pom.xml文件里添加依賴與Maven構(gòu)建插件
設置maven
?完成后點擊刷新
-
(三)創(chuàng)建日志屬性文件
- 在資源文件夾里創(chuàng)建日志屬性文件 - log4j.properties
?
log4j.rootLogger=ERROR, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/spark.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n(四)創(chuàng)建分組排行榜單例對象
- 在net.huawei.rdd包里創(chuàng)建GradeTopN單例對象
(五)本地運行程序,查看結(jié)果
- 在控制臺查看輸出結(jié)果
(六)交互式操作查看中間結(jié)果
1、讀取成績文件得到RDD
- 執(zhí)行命令:val lines = sc.textFile("hdfs://master:9000/input/grades.txt")
?2、利用映射算子生成二元組構(gòu)成的RDD
?運行代碼
3、按鍵分組得到新的二元組構(gòu)成的RDD
- 執(zhí)行命令:val groupGrades = grades.groupByKey()
4、按值排序,取前三
val top3 = groupGrades.map(item => {val name = item._1val top3 = item._2.toList.sortWith(_ > _).take(3)(name, top3)})?5、按指定格式輸出結(jié)果
top3.collect.foreach(line => {val name = line._1var scores = ""for (score <- line._2)scores = scores + " " + scoreprintln(name + ":" + scores)})執(zhí)行上述代碼
總結(jié)
以上是生活随笔為你收集整理的Spark SQL案例:分组排行榜的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue 项目上线优化
- 下一篇: Vue 脚手架中的.eslintrc.j