spark和flink中計算topN的方法
阿新 • • 發佈:2021-12-13
一、SPARK
其中top運算元呼叫的takeOrdered運算元,takeOrdered運算元底層使用的是優先佇列(BoundedPriorityQueue),首先進入的是mapPatition,然後使用reduce將每個分割槽資料進行合併
- sortBy + take
val url: URL = Launcher.getClass.getClassLoader.getResource("word.dat") val lines: RDD[String] = sc.textFile(url.getPath) lines .flatMap(_.split("\\s+")) .map(_
- top
val url: URL = Launcher.getClass.getClassLoader.getResource("word.dat") val lines: RDD[String] = sc.textFile(url.getPath) lines .flatMap(_.split("\\s+")) .map(_ -> 1) .reduceByKey(_ + _) .top(
- takeOrdered
val url: URL = Launcher.getClass.getClassLoader.getResource("word.dat") val lines: RDD[String] = sc.textFile(url.getPath) lines .flatMap(_.split("\\s+")) .map(_ -> 1) .reduceByKey(_ + _) .takeOrdered(3)(Ordering.by(o => -o._2)) .foreach(println)
二、FLINK
1)使用狀態計算
2)TreeMap
3)小頂堆