1. 程式人生 > 實用技巧 >Spark(39) -- SparkStreaming -- 流式應用狀態

Spark(39) -- SparkStreaming -- 流式應用狀態

流式應用狀態

使用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, 則代表搜尋結果越好。