spark groupByKey flatMapGroups初試


業務需要:

根據歷史庫存 預測未來某時間內庫存

 

算法需求:

1. 統計歷史3年內的庫存量

2. 將庫存划分為 平穩流量 和 波動(異常)流量

 

實際情況:

1. 每天數據量過億

2. 每天細分維度小於10萬

3. 數據中存在 時間斷點

4. 嘗試按月批次直接處理,過程較慢

 

回歸正題,數據需要 按 各細分維度 計算異常,平穩,填充時間斷點,

第一感覺,分組,然后對組內數據處理,

一頓百度 , 發現 groupByKey 可以按 key(某幾個字段分組),然后使用flatMapGroups 對組內數據 單獨處理

df2.groupByKey(row => {
      (row.getAs[](""),row.getAs[](""))
    }).flatMapGroups((key, it) => {
      ArrayBuffer[(String/**/,String/**/)]()  
   })
}

  一頓操作,本地ok

放入生產,集群環境,頓時懵了,結果完全不對。。。

懷疑executor導致問題,先添加日志

神奇是事情發生了,groupByKey之前數據是按時間排序了,然而,flatMapGroups 之后顯示順序完全錯亂

百度無果,無奈 

只能在flatMapGroups 開始先 進行排序 

ArrayBuffer.sortBy(row=>(row._1))

  到此問題解決。

 

spark新人一枚,記以做提醒。

此外發現領導給出的模板中 可以使用 

val df = dataFrame.repartition(dataFrame.col(""))

  然后使用

df.flatMap(row=>{
      ArrayBuffer[(String/**/,String/**/)]()
})

  在集群環境同樣會帶來亂序問題,后續將尋找flatMap亂序的原因.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM