สถิติสรุปแบบจัดกลุ่ม
ในแบบฝึกหัดนี้ เราจะนำเมธอด .groupBy() และ .filter() ที่ได้ใช้ไปก่อนหน้ามารวมกัน เพื่อคำนวณค่า min() และ avg() ของจำนวนผู้ใช้ที่ให้คะแนนแต่ละเพลง รวมถึงจำนวนเพลงที่ผู้ใช้แต่ละคนให้คะแนน
เนื่องจากข้อมูลของเราตอนนี้มีค่า 0 สำหรับรายการที่ยังไม่ได้รับการบริโภค จึงต้องใช้ .filter() เพื่อกรองค่าเหล่านั้นออกก่อนทำสถิติสรุปแบบจัดกลุ่ม ชุดข้อมูล msd ได้เตรียมไว้ให้แล้ว และฟังก์ชัน col(), min(), และ avg() จาก pyspark.sql.functions ได้ถูก import ไว้ให้เรียบร้อย
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การสร้าง Recommendation Engines ด้วย PySpark
คำแนะนำการฝึกหัด
- ดูตัวอย่างการใช้เมธอด
.filter(),.groupBy()และ.count()กับชุดข้อมูลmsdร่วมกับ.select()และmin()เพื่อหาจำนวนคะแนนน้อยที่สุดที่เพลงใดเพลงหนึ่งในชุดข้อมูลได้รับ จากนั้นใช้แนวทางเดียวกันนี้เพื่อคำนวณค่าavg()ของจำนวน implicit ratings ที่เพลงในmsdได้รับ - โดยใช้แนวทางเดียวกัน ให้หาค่า
min()และavg()ของจำนวน implicit ratings ที่userIdแต่ละคนให้ไว้ในชุดข้อมูลmsd
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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).____("____").____().____(____("____")).____()