推薦系統中涉及到Id轉換

2021-08-03 11:48:23 字數 2783 閱讀 5709

最近的推薦系統專案中,使用spark 中的機器學習演算法實現推薦,會把收到的使用者行為資料轉換為對應的評分資料,參考電影評分資料一樣,其中spark mllib中的als演算法需要的資料格式是uid   itemid   rating這種格式的,其中uid,itemid是int型別的,但是server手機到的資料是string的,就拿uid來說,可能是cookie,可能是deviceid,這時候就要將這些欄位先轉成int型別才能使用spark mlib中的演算法,本文將介紹一下如何轉換這個過程

首先,我們使用的是spark  中 dataframe   來處理使用者行為的資料,得到的如下格式

dataframe  如下:

root

|-- uid: string (nullable = true)

|-- item_id: string (nullable = true)

|-- action_type: string (nullable = true)

|-- rating: float (nullable = true)

+------+-------+------+

| uid|item_id|rating|

+------+-------+------+

|user09| a6| 5.0|

|user09| a6| 7.0|

+------+-------+------+

轉換步驟如下:
1.取出所有的uid,去重,然後給每個uid加上乙個臨時 i_uid 然後轉換成rdd,使用rdd中 zipwithindex得到乙個uid和乙個index

轉換成df1,加上schema資訊

2.和df關聯,將uid替換成i_uid這一列,去掉i_uid

那麼轉換成index之後的df,在進行推薦之後,推薦之後的uid,items 都是index,這時候又需要將index轉換成原有的id (id:string,  index:int)
步驟如下:
1.將推薦結果df展開,轉成 uid,itemid,rating這種格式的df3.將df 和df1 join ,將uid這個字段替換成i_uid的值,刪除i_uid這一列
具體實現**如下:
packagecom.allyes.awise.eng.core

importcom.allyes.awise.eng.core.util.logging

importorg.apache.spark.rdd.rdd

importorg.apache.spark.sql.functions._

importorg.apache.spark.sql.

importscala.collection.mutable._

/*** created by root on 5/26/17.

*/classidconverterextendsloggingwithserializable )

valindexcolname = s"i_

$"

validswithindexdf = idswithindex.todf(colname, indexcolname).cache()

valdata = df.join(idswithindexdf, colname).withcolumn(colname,

col(indexcolname)).drop(indexcolname)

+= data

}defconvertuseritemidtoindex(df: dataframe

, sqlcontext: sqlcontext) =

defindextoid(colname: string

, df: dataframe) = "

debugger

.print("indexcolname:" + indexcolname)

swaptwocolums(idindexdf, colname, indexcolname).join(df, colname).withcolumn(colname,

col(indexcolname)).drop(indexcolname)

} //from index,id to id,index

defswaptwocolums(df: dataframe

, col1: string

, col2: string) =

}

JavaScript中涉及到的RegExp型別

正規表示式 由一些普通字元和特殊字元組成的,用以描述一種特定的字元規則的表示式,它是用來限制使用者在網際網路中輸入的規則 建立正規表示式 var 變數名 正規表示式的內容 修飾符 var reg 123456789 i var 變數名 new regexp 正規表示式的內容,修飾符 var reg ...

讀取網頁中涉及到的高度

目前已經總結的有 offsetheight offsettop clientheight clienttop scrollheight scrolltop innerheight outerheight將來準備看的有 有關控制滾動的該屬性是乙個唯讀屬性,返回乙個代表畫素高度的整數值,高度包括元素高度...

GPU設計中涉及到的座標

在gpu硬體處理以及opengl建模過程中都將設計到6種空間處理,直接構成了6種座標處理的環境 1 model space或者object space 這個空間是物件空間,與其他空間沒有關係,只是直接形成這個物體的具體輪廓以及其他屬性 attribute 物件的最終構成都是有vertex都成,由他的...