ПочатиПочніть безкоштовно

Найчастіші 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()
Редагувати та запускати код