mahout推薦當uid是uuid(16進制字符串)而不是Long型的處理方式

最近在做使用mahout做協(xié)同過濾推薦的時候搀菩,發(fā)現(xiàn)無論是數(shù)據(jù)源還是推薦函數(shù)的接口user_id必須是Long型的變量

由于業(yè)務(wù)提供的user_iduuid汗销,所以是個字符串類型纸厉,并且item_id(做的是崗位推薦锐帜,即為job_id)也是uuid類型祭示,于是另外再弄三張表uid-uuid败徊,jid-jjiduid-jid-score的映射撞羽,但是這樣做實在太麻煩了阐斜,我分析用戶日志存儲用戶偏好表還要再多維護所有用戶和所有崗位表,遂開始研究uuiduid能不能做個映射诀紊。

首先了解一下UUID:

UUID是指在一臺機器上生成的數(shù)字谒出,它保證對在同一時空中的所有機器都是唯一的。通常平臺會提供生成的API邻奠。按照開放軟件基金會(OSF)制定的標準計算笤喳,用到了以太網(wǎng)卡地址、納秒級時間碌宴、芯片ID碼和許多可能的數(shù)字

UUID由以下幾部分的組合:

  1. 當前日期和時間杀狡,UUID的第一個部分與時間有關(guān),如果你在生成一個UUID之后贰镣,過幾秒又生成一個UUID呜象,則第一個部分不同膳凝,其余相同。
  2. 時鐘序列恭陡。
  3. 全局唯一的IEEE機器識別號鸠项,如果有網(wǎng)卡,從網(wǎng)卡MAC地址獲得子姜,沒有網(wǎng)卡以其他方式獲得祟绊。
    UUID的唯一缺陷在于生成的結(jié)果串會比較長。關(guān)于UUID這個標準使用最普遍的是微軟的GUID(Globals Unique Identifiers)哥捕。其格式為:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16)牧抽,其中每個 x 是 0-9 或 a-f 范圍內(nèi)的一個十六進制的數(shù)字

重點來了:

標準的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12) 其中每個 x 是 0-9 或 a-f 范圍內(nèi)的一個十六進制的數(shù)字。

我現(xiàn)在需要處理的uuid就是這個標準的UUID格式遥赚,了解了UUID的構(gòu)成以后我們就好辦了:

1. 首先將uuid去掉連接符扬舒,從原先的uuid格式字符串轉(zhuǎn)化為沒有連接符的16進制字符串

2. 將16進制字符串轉(zhuǎn)化為10進制數(shù)(內(nèi)部使用mahout接口)

  1. 將10進制數(shù)再轉(zhuǎn)回16進制的字符串(外部接口調(diào)用使用,記得補0)

用BigInt來存儲這個唯一的十進制數(shù)凫佛,這樣就構(gòu)成了一種映射讲坎。

查了下python的內(nèi)置uuid庫的API用法:


UUID API

這里我直接用python演示(python3)

# Author:XzAmrzs
import uuid as uid2uuid

a = '0b27021f-3766-4b7b-b761-3c29768612fe'
# a = '4da5cc89-f65c-4658-8e78-2eb978e44b50'

x = uid2uuid.UUID(a)
print(x)  # 0b27021f-3766-4b7b-b761-3c29768612fe
print(x.hex) # 0b27021f37664b7bb7613c29768612fe
uid = int(x.hex, 16)  # 16進制字符串轉(zhuǎn)10進制數(shù)
print(uid)  # 14824050569154520558414196490098840318

uuid = "{:032x}".format(uid)  # 注意這里要用0補齊32位,否則以0開頭的16的轉(zhuǎn)回來會丟0
print(uuid)  # 0b27021f37664b7bb7613c29768612fe
print(uid2uuid.UUID(uuid))  # 0b27021f-3766-4b7b-b761-3c29768612fe

輸出見下圖

0b27021f-3766-4b7b-b761-3c29768612fe
0b27021f37664b7bb7613c29768612fe
14824050569154520558414196490098840318
0b27021f37664b7bb7613c29768612fe
0b27021f-3766-4b7b-b761-3c29768612fe

寫完的時候google了一下發(fā)現(xiàn)墻外面也有不少討論這個的愧薛,mahout官方也是說要做轉(zhuǎn)換晨炕,直接用字符串類型進入推薦算法,效率會特別慢毫炉!

如下:
Why user id and item id must be long type ?
how to map uuid to userid in preference class to use mahout recommender
mahout-user mailing list archives:UUID based user IDs

參考:
Python 3.x 格式化輸出字符串 % & format 筆記
python常用的十進制朋贬、16進制辩块、字符串溉痢、字節(jié)串之間的轉(zhuǎn)換

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辛掠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子进陡,更是在濱河造成了極大的恐慌愿阐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾疚,死亡現(xiàn)場離奇詭異缨历,居然都是意外死亡,警方通過查閱死者的電腦和手機盗蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門戈二,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喳资,你說我怎么就攤上這事√诠” “怎么了仆邓?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵鲜滩,是天一觀的道長。 經(jīng)常有香客問我节值,道長徙硅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任搞疗,我火速辦了婚禮嗓蘑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匿乃。我一直安慰自己桩皿,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布幢炸。 她就那樣靜靜地躺著泄隔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宛徊。 梳的紋絲不亂的頭發(fā)上佛嬉,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音闸天,去河邊找鬼暖呕。 笑死,一個胖子當著我的面吹牛苞氮,可吹牛的內(nèi)容都是我干的缰揪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼葱淳,長吁一口氣:“原來是場噩夢啊……” “哼钝腺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赞厕,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艳狐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后皿桑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫目,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年诲侮,在試婚紗的時候發(fā)現(xiàn)自己被綠了镀虐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡沟绪,死狀恐怖刮便,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绽慈,我是刑警寧澤恨旱,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布辈毯,位于F島的核電站,受9級特大地震影響搜贤,放射性物質(zhì)發(fā)生泄漏谆沃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一仪芒、第九天 我趴在偏房一處隱蔽的房頂上張望唁影。 院中可真熱鬧,春花似錦掂名、人聲如沸据沈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卓舵。三九已至,卻和暖如春膀钠,著一層夾襖步出監(jiān)牢的瞬間掏湾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工肿嘲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留融击,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓雳窟,卻偏偏與公主長得像尊浪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子封救,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354