Найчастіші 3-грами для кожного розділу
Тепер ми використаємо запит як підзапит у більшому запиті. Spark SQL підтримує розширені можливості SQL. Раніше ви дізналися, як знаходити найпоширеніші послідовності слів для всієї книги з 12 розділів. Тепер ви отримаєте найчастіший 3-грам для кожного з 12 розділів. Ви зробите це за допомогою віконної функції, щоб отримати верхній рядок у межах кожної групи.
Є таблиця зі стовпцями word, id, chapter.
- Стовпець
chapterвідповідає номеру розділу. - Стовпець
wordмістить окреме слово в документі. - Стовпець
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()