НачатьНачать бесплатно

Наиболее частые 3-граммы по главам

Теперь мы используем запрос в качестве подзапроса в более крупном запросе. Spark SQL поддерживает расширенные возможности SQL. Ранее вы научились находить наиболее распространённые последовательности слов по всей книге из 12 глав. Теперь вы найдёте наиболее частую 3-грамму для каждой из 12 глав. Для этого используйте оконную функцию, чтобы получить первую строку в каждой группе.

В таблице есть столбцы 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 в качестве подзапроса в более крупном запросе, чтобы получить наиболее частую 3-грамму для каждой главы. Результат будет иметь ту же схему, но с одной строкой на каждую главу. Используйте ROW_NUMBER(), чтобы получить номер строки для каждой строки в каждой главе.

Это упражнение является частью курса

Введение в Spark SQL на Python

Посмотреть курс

Инструкции к упражнению

  • Получите наиболее частую 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()
Редактировать и запускать код