Spark取交集的三種方式

2021-10-23 03:55:45 字數 1926 閱讀 7449

假設現有rdda和rddb用於根據其中某個元素取交集:

rdda的資料量小於rddb

將rdda(資料量稍小)廣播出去,然後在rddb中將廣播拿回來,做交集

/**

* 將rdda和rddb 根據第乙個元素進行交集

*/// 將rdda拿到本地對映成map

val rddamap: map[string,

(string, int)

]= rdda.

collect()

.tomap

// 將rddamap廣播出去

val rddabroadcast: broadcast[map[string,

(string, int)]]

= sc.

broadcast

(rddamap)

val resultrdd = rddb.map }.

filter

(_._1 !="")

// 過濾掉

讓資料量更大的rdd放前面去join資料量小的rdd

val rddc: rdd[

(string,

((string, string, string)

,(string, int)))

]= rddb.

join

(rdda)

val resultrdd2= rddc.

map(r =

>

(r._1, r._2._1._1, r._2._2._1)

)

優點:方式簡單,資料量大的情況任然可以使用,一般情況通用

缺點:會發生資料傾斜的情況,資料傾斜,可以考慮用第三種

// 將rdda先做成和rddb一樣的格式

val tmprdda: rdd[

(string,

(string, string, string))]

= rdda.

map(r =

>

(r._1,

(r._2._1, r._2._2.tostring,"")

))val unionrddarddb: rdd[

(string,

(string, string, string))]

= rddb.

union

(tmprdda)

val resultrdd3: rdd[

(string,

(string, string))]

= unionrddarddb

.groupbykey()

// 將key相同的放到一起做處理

.flatmap

else})

.filter

(_._1 !="")

if(rddaite.nonempty)

resultarr

}

優勢:在兩個rdd做交集,發生資料傾斜的時候,可以用這種方式進行規避資料傾斜

缺點:略顯複雜,在遇到資料傾斜時,可用,否則,盡量不用吧,當做 「the last ace」

Spark 三種作業提交方式

本地方式是在本地 jvm 中啟動乙個程序來模擬執行環境,多個執行緒進行作業執行,主要用於開發測試。standalone,yarn,兩種方式的區別在於 clustermanager 的不同,clustermanager 的作用在於進行各個程序的啟動管理,資源的排程。standalone的 cluste...

網頁爬取的三種方式

爬取的重點在於分析網頁結構,以爬取 網為例 爬取網頁有三種方式 1.urllib.request 2.封裝request請求 3.urlretrieve直接寫入硬碟 下面以第三種方法爬取 如下 爬取網頁有三種方式 urllib.request,封裝request請求,urlretrieve直接寫入硬...

定位的三種方式

1.wifi定位,ip位址定位,通過ip位址進行查詢實際位址 2.基站定位,訊號塔,基站 手機通訊服務的裝置 訊號的格數決定了手機距離基站遠近,精確度 幾十公尺到幾公里,精確度來自於基站的數量 wifi定位和基站定位侷限性 不能定位海拔 3.gps定位,通過和gps定位衛星通訊進行定位的,使用最少衛...