Spark RDD的方式求TopN

2021-10-05 01:13:48 字數 2086 閱讀 1624

資料

方式一

val lines = sc.textfile(

"/ruozedata-spark-core/topn/site.log"

) val topn = 2;

val rdd = lines.map(x=

>

).reducebykey(_+_).groupby(_._1._1).mapvalues(x=

>

).take(topn)

其中直接x.tolist容易引起oom

方式二

val lines = sc.textfile(

雖然做了distinct,但是網域名稱若果多了,ui還是會爆掉(sortby會很多)

方式三:使用分割槽

ui的情況有所好轉,,但是因為take需要將所有資料都拉取到driver上才能完成操作

方式四:較優的解決方案

val topn = 2;

val lines = sc.textfile(

"/ruozedata-spark-core/topn/site.log"

)val processrdd = lines.map(x =

>

)val domains = processrdd.map(_._1._1).distinct(

).collect(

)val result = processrdd.reducebykey(new topnpartitioner(domains)

,_+_)

> })

treeset.iterator

})

MySQL分組排序求Top

這篇文章主要介紹了詳解mysql分組排序求top 表結構 create table score id int 11 not null auto increment,grp int 11 default null,num int 11 default null,primary key id engin...

SparkRDD的分割槽

rdd的分割槽,在運算元裡面未指定rdd的分割槽的時候,預設的分割槽數和核數相同,同理也會啟動相應的task個數 原始碼中的分割槽數預設是2 sc.textfile 其中分割槽數和讀取的小檔案數相同,都小於128m,基於spark2.2.0的,textfile預設是呼叫的是hadoop的textfi...

SparkRDD的廣播變數

廣播變數用來高效分發較大的物件。向所有工作節點傳送乙個較大的唯讀值,以供乙個或多個spark操作使用。比如,如果你的應用需要向所有節點傳送乙個較大的唯讀查詢表,甚至是機器學習演算法中的乙個很大的特徵向量,廣播變數用起來都很順手。在多個並行操作中使用同乙個變數,但是 spark會為每個任務分別傳送。s...