資料
方式一
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...