開始使用免費開始

每章最常見的 3 元組

現在要在一個較大的查詢中使用子查詢。Spark SQL 支援進階 SQL 功能。你先前已學過如何在包含 12 章的整本書中,找出最常見的單詞序列。現在要為每一章各自找出出現最頻繁的 3 元組。你會使用視窗函式,取得每個群組的排名第一列。

有一個資料表,包含欄位 wordidchapter

  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 作為子查詢,套入更大的查詢中,取得每一章最常見的 3 元組。目標結果的綱要(schema)相同,但每章只會有一列。請使用 ROW_NUMBER() 來為每章的每一列編排行號。

本練習屬於課程

Python Spark SQL 入門

檢視課程

練習說明

  • 取得每章最常見的 3 元組。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

#   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()
編輯並執行程式碼