分组汇总统计
在本练习中,您将把之前用过的 .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).____("____").____().____(____("____")).____()