案例 | 通過PySpark實現城市熱點大數據統計
1 需求分析
在互聯網中,我們經常會見到城市熱點圖這樣的報表數據,例如在百度統計中,會統計今年的熱門旅游城市、熱門報考學校等,會將這樣的信息顯示在熱點圖中。我們根據每個用戶的IP地址,與我們的IP地址段進行比較,確認每個IP落在哪一個IP端內,獲取經緯度,然后繪制熱力圖。

因此,我們需要通過日志信息(運行商或者網站自己生成)和城市ip段信息來判斷用戶的ip段,統計熱點經緯度。
2 技術調研
因為我們的需求是完成一張報表信息,所以對程序的實時性沒有要求,所以可以選擇內存計算spark來實現上述功能。
3 數據準備
ip日志信息

城市ip段信息

4 代碼開發(fā)
整體步驟:
1、加載城市ip段信息,獲取ip起始數字和結束數字,經度,維度

2、加載日志數據,獲取ip信息,然后轉換為數字,和ip段比較
3、比較的時候采用二分法查找,找到對應的經度和維度

4、然后對經度和維度做單詞計數
完整代碼:
整體步驟
5 廣播變量的使用
要統計Ip所對應的經緯度, 每一條數據都會去查詢ip表
每一個task 都需要這一個ip表, 默認情況下, 所有task都會去復制ip表
實際上 每一個Worker上會有多個task, 數據也是只需要進行查詢操作的, 所以這份數據可以共享,沒必要每個task復制一份
可以通過廣播變量, 通知當前worker上所有的task, 來共享這個數據,避免數據的多次復制,可以大大降低內存的開銷
sparkContext.broadcast(要共享的數據)
