在構建精準用戶畫像時,面臨著這樣一個問題:日志采集不能成功地收集用戶的所有ID,且每條業(yè)務線有各自定義的UID用來標識用戶,從而造成了用戶ID的零碎化。因此,為了做用戶標簽的整合,用戶ID之間的強打通(亦稱為ID-Mapping)成了迫切的需求。大概三年前,在知乎上有這樣一個與之相類似的問題:如何用MR實現(xiàn)并查集以對海量數(shù)據(jù)pair做聚合;目前為止還無人解答。本文將提供一個可能的解決方案——如何用MR計算框架來實現(xiàn)大數(shù)據(jù)下的ID強打通。
首先,簡要地介紹下Android設備常見的ID:
- IMEI(International Mobile Equipment Identity),即通常所說的手機序列號、手機“串號”,用于在移動電話網(wǎng)絡中識別每一部獨立的手機等行動通訊裝置;序列號共有15位數(shù)字,前6位(TAC)是型號核準號碼,代表手機類型。接著2位(FAC)是最后裝配號,代表產(chǎn)地。后6位(SNR)是串號,代表生產(chǎn)順序號。最后1位(SP)一般為0,是檢驗碼,備用。
- MAC(Media Access Control)一般代指MAC位址,為網(wǎng)卡的標識,用來定義網(wǎng)絡設備的位置。
- IMSI(International Mobile SubscriberIdentification Number),儲存在SIM卡中,可用于區(qū)別移動用戶的有效信息;其總長度不超過15位,同樣使用0~9的數(shù)字。其中MCC是移動用戶所屬國家代號,占3位數(shù)字,中國的MCC規(guī)定為460;MNC是移動網(wǎng)號碼,最多由兩位數(shù)字組成,用于識別移動用戶所歸屬的移動通信網(wǎng);MSIN是移動用戶識別碼,用以識別某一移動通信網(wǎng)中的移動用戶。
- Android ID是系統(tǒng)隨機生成的設備ID 為一串64位的編碼(十六進制的字符串),通過它可以知道設備的壽命(在設備恢復出廠設置或刷機后,該值可能會改變)。
2. 設計
從圖論的角度出發(fā),ID強打通更像是將小連通圖合并成一個大連通圖;比如,在日志中出現(xiàn)如下三條記錄,分別表示三個ID集合(小連通圖):
A B C
C D
D E
通過將三個小連通圖合并,便可得到一個大連通圖——完整的ID集合列表A B C D E。淘寶明風介紹了如何用Spark GraphX通過outerJoinVertices等運算符來做大數(shù)據(jù)下的多圖合并;針對ID強打通的場景,也可采用類似的思路:日志數(shù)據(jù)構建大的稀疏圖,然后采用自join的方式做打通。但是,我并沒有選用GraphX,理由如下:
- GraphX只支持有向圖,而不支持無向圖,而ID之間的關聯(lián)關系是一個無向連通圖;
- GraphX的join操作不完全可控,“不完全可控”是指在做圖合并時我們需要做過濾山寨設備、一對多的ID等操作,而在GraphX封裝好的join算子上實現(xiàn)過濾操作則成本過高。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26