เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

3-tuple ที่พบบ่อยที่สุดในแต่ละบท

คราวนี้เราจะนำคิวรีไปใช้เป็น subquery ในคิวรีที่ใหญ่ขึ้น Spark SQL รองรับฟีเจอร์ SQL ขั้นสูง ก่อนหน้านี้คุณได้เรียนรู้วิธีค้นหาลำดับคำที่พบบ่อยที่สุดในหนังสือทั้งเล่มซึ่งมี 12 บท และในแบบฝึกหัดนี้จะหา 3-tuple ที่พบบ่อยที่สุดในแต่ละบทจากทั้ง 12 บท โดยใช้ window function เพื่อดึงแถวอันดับต้นของแต่ละกลุ่ม

ตารางที่ใช้มีคอลัมน์ดังนี้: word, id, chapter

  1. คอลัมน์ chapter คือหมายเลขบท
  2. คอลัมน์ word คือคำแต่ละคำในเอกสาร
  3. คอลัมน์ id คือตำแหน่งของคำในเอกสาร

นอกจากนี้ยังมีคิวรีต่อไปนี้:

subquery = """
SELECT chapter, w1, w2, w3, COUNT(*) as count
FROM
(
    SELECT
    chapter,
    word AS w1,
    LEAD(word, 1) OVER(PARTITION BY chapter ORDER BY id ) AS w2,
    LEAD(word, 2) OVER(PARTITION BY chapter ORDER BY id ) AS w3
    FROM text
)
GROUP BY chapter, w1, w2, w3
ORDER BY chapter, count DESC
"""
spark.sql(subquery).show(5)
+-------+---+-----+----+-----+
|chapter| w1|   w2|  w3|count|
+-------+---+-----+----+-----+
|      1| up|   to| the|    6|
|      1|one|   of| the|    6|
|      1| in|front|  of|    5|
|      1| up|  and|down|    5|
|      1| it|  was|   a|    5|
+-------+---+-----+----+-----+
only showing top 5 rows

จากตารางนี้ แถวแรกของผลลัพธ์ที่ต้องการจะเป็น:

+-------+---+-----+----+-----+
|chapter| w1|   w2|  w3|count|
+-------+---+-----+----+-----+
|      1| up|   to| the|    6|
+-------+---+-----+----+-----+

โจทย์คือการนำ subquery ไปใช้เป็น subquery ในคิวรีที่ใหญ่ขึ้น เพื่อหา 3-tuple ที่พบบ่อยที่สุดในแต่ละบท ผลลัพธ์ที่ได้จะมี schema เดิม แต่มีหนึ่งแถวต่อหนึ่งบท ใช้ ROW_NUMBER() เพื่อกำหนดหมายเลขแถวในแต่ละบท

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Introduction to Spark SQL in Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • หา 3-tuple ที่พบบ่อยที่สุดในแต่ละบท

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

#   Most frequent 3-tuple per chapter
query = """
SELECT chapter, w1, w2, w3, count FROM
(
  SELECT
  chapter,
  ____() OVER (PARTITION BY chapter ORDER BY ____ DESC) AS row,
  w1, w2, w3, count
  FROM ( %s )
)
WHERE row = ____
ORDER BY chapter ASC
""" % subquery

spark.sql(query).show()
แก้ไขและรันโค้ด