Cele mai frecvente 3-tuple per capitol
Vom folosi acum o interogare ca subinterogare într-o interogare mai mare. Spark SQL suportă funcționalități avansate ale SQL. Anterior, ai învățat cum să găsești cele mai frecvente secvențe de cuvinte dintr-o carte cu 12 capitole. Acum vei obține cel mai frecvent 3-tuple pentru fiecare dintre cele 12 capitole. Vei face acest lucru folosind o funcție de fereastră pentru a extrage primul rând per grup.
Există un tabel cu coloanele word, id, chapter.
- Coloana
chaptercorespunde numărului unui capitol. - Coloana
wordcorespunde unui singur cuvânt din document. - Coloana
idcorespunde poziției cuvântului în document.
Avem, de asemenea, următoarea interogare:
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
Din acest tabel poți determina că primul rând al rezultatului dorit va fi:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Sarcina ta este să folosești subquery ca subinterogare într-o interogare mai mare, pentru a obține cel mai frecvent 3-tuple per capitol. Rezultatul dorit va avea aceeași schemă, dar cu un singur rând per capitol. Folosește ROW_NUMBER() pentru a obține numărul rândului per capitol.
Acest exercițiu face parte din cursul
Introducere în Spark SQL în Python
Instrucțiuni pentru exercițiu
- Obține cel mai frecvent 3-tuple per capitol.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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()