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演算法對評價表進行計算,計算出電影的特徵矩陣。通過電影特徵的矩陣計算得出每個電影最相似的幾個電...