日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HQL写topN、Spark写topN

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HQL写topN、Spark写topN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HQL寫topN用窗口函數rank() 、row_number()、dense_rank()

1、rank(),跳躍排序,假如第一第二相同,那么第三個就是3

select * from( select id, cn, score, rank() over(partition by id order by score desc)as ranks from top N ) A where ranks<5;

2、row_number()

select * from( select id, cn, score, row_number() over(partition by id order by score desc)as ranks from top N ) A where ranks<5;

3、dense_rank(),假如第一第二相同,那么第三個就是2

select * from( select id, cn, score, dense_rank() over(partition by id order by score desc)as ranks from top N ) A where ranks<5;

Spark寫topN

(1)按照key對數據進行聚合(groupByKey)
(2)將value轉換為數組,利用scala的sortBy或者sortWith進行排序(mapValues)數據量太大,會OOM。

1 數學 100 1 語文 99 1 英語 80 1 物理 99 2 數學 99 2 語文 80 2 英語 10 2 物理 99 3 數學 100 3 語文 79 3 英語 79 3 物理 80 package spark01import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext}object topN {def main(args : Array[String]) : Unit = {val conf = new SparkConf().setAppName("topN").setMaster("local[*]")val sc = new SparkContext(conf)val linesRDD: RDD[String] = sc.textFile("D:\\薛艷春\\桌面\\大數據\\Spark\\topn.txt")val lineRDD : RDD[(Int, (String, Int))] = linesRDD.map(lines => {val strings : Array[String] = lines.split("\t")Tuple2(strings(0).toInt, Tuple2(strings(1), strings(2).toInt))})val groupByKeyRDD: RDD[(Int, Iterable[(String, Int)])] = lineRDD.groupByKey(1) //這里不把分區為1輸出會出錯亂val reduceRDD : RDD[(Int, List[(String, Int)])] = groupByKeyRDD.map(css => {val key : Int = css._1val value : Iterable[(String, Int)] = css._2val list : List[(String, Int)] = value.toList.sortWith(_._2>_._2).take(3) //注意排序比較用的是Int型,一開始用的String找了好久錯誤(key, list)})reduceRDD.foreach(v=>{print(v._1+":")v._2.foreach(println)})sc.stop()} }

總結

以上是生活随笔為你收集整理的HQL写topN、Spark写topN的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。