spark電影推薦系統的簡單測試

2021-08-20 08:52:58 字數 3989 閱讀 9525

objectmovie_users_analyzer_rddelse if(args.length>1)

valsc =newsparkcontext(newsparkconf().setmaster(masterurl

valusersrdd = sc.textfile(datapath

+"users.dat")

valmoviesrdd = sc.textfile(datapath

+"movies.dat")

valoccupationsrdd= sc.textfile(datapath

+"occupations.dat")

valratingsrdd= sc.textfile(datapath

+"ratings.dat")

/*** *電影 點評 系統 使用者 行為 分析 之一: 分析 具體 某部 電影 ** 的 使用者 資訊,

* 如 電影 id 為 *1193 的 使用者 資訊( 使用者 的 id、 age、 gender、 occupation)

*/valusersbasic:rdd[(string

,(string

,string

,string))] = usersrdd.map(_.split("::")).map

for(elem<- usersbasic.collect().take(2))

valoccupations:rdd[(string

,string)] = occupationsrdd.map(_.split("::")).map(job=>(job(0),job(1)))

for(elem <- occupations.collect().take(2))

valuserinformation:rdd[(string

,((string

,string

,string),

string))] = usersbasic.join(occupations)

userinformation.cache()

for(elem<- userinformation.collect().take(2))

valtargetmovie:rdd[(string

,string)] = ratingsrdd.map(_.split("::")).map(x=>(x(0),x(1))).filter(_._2.equals("1193"))

println("------")

for(elem<-targetmovie.collect().take(2))

valtargetusers:rdd[(string

,((string

,string

,string),

string))] = userinformation.map(x=>(x._2._1._1,x._2))

for(elem<-targetusers.collect().take(2))

println("電影點評系統使用者行為分析, 統計**電影id為 1193 的電影使用者資訊: 使用者的 id、 性別、 年齡、 職業名")

valuserinformationforspecificmovie:rdd[(string

,(string

,((string

,string

,string),

string)))] = targetmovie.join(targetusers)

for(elem<-userinformationforspecificmovie.collect().take(10))

println("-------------------------------------")

println("所有電影中口碑最好的電影:")

valratings = ratingsrdd.map(_.split("::")).map(x=>(x(0),x(1),x(2))).cache() //格式化出電影id和評分

ratings.map(x=>(x._2,(x._3.todouble,

1))) //格式化成k-v

.reducebykey((x,y)=>(x._1+y._1,x._2+y._2))//對 value 進行 reduce 操作, 分別 得出 每部 電影 的 總的 評分 和 總的 點評 人數

.map(x=>(x._2._1.todouble/x._2._2,x._1)) //求出電影的平均分

.sortbykey(false) //降序排序

.take(10) //取top10

.foreach(println) //迴圈輸出

valmale = "m"

valfamale = "f"

valgenderratings = ratings.map(x=>(x._1,(x._1,x._2,x._3))).join(usersrdd.map(_.split("::")).map(x=>(x(0),x(1))).cache())

genderratings.take(2).foreach(println)

valmalefliteredratings:rdd[(string

,string

,string)] = genderratings.filter(x=>x._2._2.equals("m")).map(x=>x._2._1)

valfemalefliteredratings:rdd[(string

,string

,string)] = genderratings.filter(x=>x._2._2.equals("f")).map(x=>x._2._1)

println("所有電影中最受男性喜愛的電影top10:")

malefliteredratings.map(x=>(x._2,(x._3.todouble,

1))) //格式化成k-v值

.reducebykey((x,y)=>(x._1+y._1,x._2+y._2)) //對 value 進行 reduce 操作, 分別 得出 每部 電影 的 總的 評分 和 總的 點評 人數

.map(x => (x._2._1.todouble/x._2._2,x._1)) //求電影平均分

.sortbykey(false).take(10).foreach(println) //降序排序

println("所有電影中最受女性喜愛的電影top10:")

femalefliteredratings.map(x=>(x._2,(x._3.todouble,

1))) //格式化成k-v值

.reducebykey((x,y)=>(x._1+y._1,x._2+y._2)) //對 value 進行 reduce 操作, 分別 得出 每部 電影 的 總的 評分 和 總的 點評 人數

.map(x => (x._2._1.todouble/x._2._2,x._1)) //求電影平均分

.sortbykey(false).take(10).foreach(println) //降序排序

基於Spark的電影推薦系統(推薦系統 1)

行業背景 快速 apache spark以記憶體計算為核心 通用 一站式解決各個問題,adhoc sql查詢,流計算,資料探勘,圖計算 完整的生態圈 只要掌握spark,就能夠為大多數的企業的大資料應用場景提供明顯的加速 猜你喜歡 為代表的推薦系統,從吃穿住行等專案背景介紹 本專案是乙個基於apac...

推薦系統 電影推薦系統(二)

als是交替最小二乘法的簡稱,是2008年以來,用的比較多的協同過濾演算法。它已經整合到spark的mllib庫中,使用起來比較方便。這裡可以想象一下,每個人的性格愛好可以認為是乙個抽象的模型,每個人的模型都有自己的乙個特點。因此,每個人對於商品的評價都有自己的一套規律,als演算法就是可以通過這些...

推薦系統 電影推薦系統(一)

二 電影推薦思路總結 資料儲存部分 離線推薦部分 實時推薦部分 系統初始化部分 離線推薦部分 實時推薦部分 業務系統部分 使用者電影特徵提取時,必須要有對應的資料,電影表,使用者表,使用者評價表。通過als演算法對評價表進行計算,計算出電影的特徵矩陣。通過電影特徵的矩陣計算得出每個電影最相似的幾個電...