最近的推薦系統專案中,使用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.coreimportcom.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都成,由他的...