群組化摘要統計
在這個練習中,你會把先前使用過的 .groupBy() 和 .filter() 方法結合起來,計算每首歌被評分的使用者數量的 min() 與 avg(),以及每位使用者評分的歌曲數量的 min() 與 avg()。
因為我們的資料現在包含尚未消費項目的 0,所以在做這類群組化摘要統計時需要用 .filter() 把它們排除。這裡已提供 msd 資料集。來自 pyspark.sql.functions 的 col()、min() 和 avg() 函式也已為你匯入。
本練習屬於課程
使用 PySpark 打造推薦引擎
練習說明
- 範例中,對
msd資料集先後套用.filter()、.groupBy()和.count()方法,再搭配.select()與min(),以回傳資料集中任一首歌所收到評分次數的最小值。請以此為範本,計算msd中歌曲所收到隱含評分次數的avg()。 - 以相同做法,找出在
msd資料集中,各userId所提供隱含評分次數的min()與avg()。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Min num implicit ratings for a song
print("Minimum implicit ratings for a song: ")
msd.filter(col("num_plays") > 0).groupBy("songId").count().select(min("count")).show()
# Avg num implicit ratings per songs
print("Average implicit ratings per song: ")
____.filter(____("____") > 0).groupBy("____").count().____(avg("____")).____()
# Min num implicit ratings from a user
print("Minimum implicit ratings from a user: ")
msd.____(____("num_plays") > ____).____("userId").____().select(____("____")).____()
# Avg num implicit ratings for users
print("Average implicit ratings per user: ")
____.filter(col("num_plays") > 0).____("____").____().____(____("____")).____()