Spark千億級資料去重,效能最佳化踩坑之路
大家好,我是狗哥,今天給大家寫一點乾貨,這次我們們就從0-1把思路給大家講一下,這也是我同事在資料開發中踩過的坑,希望能幫助到大家。
先虛擬一個業務場景,方便大家思考
我舉個例子,拿京東或者淘寶說吧,如果你的業務讓你計算幾個維度(廣告位置、小時、廣告型別等等吧,我就隨便舉個例子),每個維度的資料uv量級,方便業務評估和市場決策,資料精準度不要求完全精準,誤差在1%以內就行了,你該如何做?
我們針對兩個開發者思路,來跟大家梳理我們踩過的坑。
思路一,能跑就行,不關注效能
解決方式:直接count distinct
優勢:應屆生都會
弊端:資料去重效能差
計算效能:剛開始資料量少,4-6個小時可以出來,隨著資料量增多執行時間 6-12個小時,業務對此非常不滿意,早上來了看不到資料包表,需要等下午才產出,直接影響資料人員的口碑(老闆開週會,肯定會diss做資料的,不能忍呀兄弟們,一定要精益求精!!!)。
思路二,用bitmap去重複
經過一番技術調研,發現用bitmap去重複,效能會很高,但裝置id(imei、idfa) 不是數字,沒有辦法用bitmap,如果想用bitmap,需要把裝置ID做hash計算,還得取絕對值,正數才行
解決方式:abs(hash(imei))
優勢:bitmap去重複效能高效,資料計算效能降低到了40分鐘,從之前的10個小時跑不出來,變成了40分鐘可以執行出來,直接單車變摩托。
弊端:發現資料誤差到了6%,排查發現,是資料裝置ID在hash的時候會出現正負數,也就是兩個裝置他的hash值是正負對稱的(舉個例子:一個裝置hash值 -1,一裝置個hash值1),兩個裝置取絕對值abs,會出現都等於1。
針對這個問題,狗哥給出了建議,就是先根據裝置ID取模1000(這個數大家可以自己去根據資料量除錯),進行裝置ID分桶,這樣的好處相同裝置會分在同一個桶內,同時減少了hash值絕對值這之後相互影響的情況,然後每個分桶的u去重複uv再累加,這樣下來,分維度的資料uv就會計算出來了,資料準確度到了0.03%,符合業務要求,同時資料效能穩定在40分鐘左右。
來自 “ 狗哥 ”, 原文作者:小晨說資料;原文連結:https://mp.weixin.qq.com/s/TXOMoxSDsUVCHRbO01BFeQ,如有侵權,請聯絡管理員刪除。
相關文章
- 筆記:Mysql踩坑之路筆記MySql
- ionic3 踩坑之路
- 千億級資料遷移mongodb成本節省及效能最佳化實踐(附效能對比質疑解答)MongoDB
- Spark效能最佳化篇三:資料傾斜調優Spark
- 解析資料踩過的坑
- html2canvas的踩坑之路HTMLCanvas
- MySQL去重資料MySql
- PWA - ios 新增到桌面功能(踩坑之路)iOS
- 吐槽前端元件化的踩坑之路前端元件化
- Istio 升級後踩的坑
- jQuery升級踩的那些坑jQuery
- C#資料去重C#
- Spark輸出自定義檔案目錄踩坑(Java)SparkJava
- MySQL資料庫行去重複和列去重複MySql資料庫
- Hive千億級資料傾斜解決方案Hive
- SparkR連結mysql資料庫(踩坑)SparkMySql資料庫
- Spark2 Dataset去重、差集、交集Spark
- 淺談重構中踩過的坑
- Hexo6 升級踩坑指南Hexo
- 頂級大廠Quora如何最佳化資料庫效能?資料庫
- mysql資料去重和排序MySql排序
- C# datatable中重複資料去重C#
- 如何“玩轉”MongoDB?羅輯思維資料庫效能最佳化之路!MongoDB資料庫
- Android SDK 開發——釋出使用踩坑之路Android
- antd 3.x升4.x踩坑之路~
- Xorm GroupBy 取出的資料異常踩坑ORM
- 【效能最佳化】ORACLE資料庫效能最佳化概述Oracle資料庫
- AS3.0升級埋坑之路S3
- Elasticsearch 億級資料檢索效能最佳化案例實戰!Elasticsearch
- 效能最佳化:Doris-億級資料秒出結果
- 千億級資料遷移mongodb成本節省及效能優化實踐(附效能對比質疑解答)MongoDB優化
- async語法升級踩坑小記
- Vue.js 升級踩坑小記Vue.js
- 踩過的坑(一)——web容器升級Web
- 大資料去重(data deduplication)方案大資料
- map/reduce實現資料去重
- 基於HBase構建千億級文字資料相似度計算與快速去重系統
- Oracle:重複資料去重,只取最新的一條資料Oracle