Spark(39) -- SparkStreaming -- 流式應用狀態
阿新 • • 發佈:2020-10-13
流式應用狀態
使用SparkStreaming處理實際實時應用業務時,針對不同業務需求,需要使用不同的函式。SparkStreaming流式計算框架,針對具體業務主要分為三類,使用不同函式進行處理:
- 業務一:無狀態Stateless
- 使用transform和foreacRDD函式
- 比如實時增量資料ETL:實時從Kafka Topic中獲取資料,經過初步轉換操作,儲存到ES或HBase表中。
- 業務二:有狀態State
- 雙十一大螢幕所有實時累加統計數字(比如銷售額和銷售量等),比如銷售額、網站PV、UV等等;
- 函式:updateStateByKey、mapWithState
- 業務三:視窗統計
- 每隔多久時間統計最近一段時間內資料,比如餓了麼後臺報表,每隔5分鐘統計最近20分鐘訂單數。
- 蘇寧搜尋推薦時:
- 資料分析:統計搜尋行為時間跨度,86%的搜尋行為在5分鐘內完成、90%的在10分鐘內完成(從搜尋開始到最後一次點選結果列表時間間隔);
- NDCG實時計算時間範圍設定在15分鐘,時間視窗為 15 分鐘,步進 5 分鐘,意味著每 5 分鐘計算一次。每次計算,只對在區間[15 分鐘前, 10 分鐘前]發起的搜尋行為進行 NDCG 計算,這樣就不會造成重複計算。
Normalized Discounted Cumulative Gain,即 NDCG,常用作搜尋排序的評價指標,理想情況下排序越靠前的搜尋結果,點選概率越大,即得分越高 (gain)。CG = 排序結果的得分求和, discounted 是根據排名,對每個結果得分 * 排名權重,權重 = 1/ log(1 + 排名) , 排名越靠前的權重越高。首先我們計算理想 DCG(稱之為 IDCG), 再根據使用者點選結果, 計算真實的 >DCG, NDCG = DCG / IDCG,值越接近 1, 則代表搜尋結果越好。