Nejčastější 3-tice podle kapitoly
Teď použijeme dotaz jako poddotaz v rámci většího dotazu. Spark SQL podporuje pokročilé funkce SQL. Dříve ses naučil/a, jak najít nejčastější slovní sekvence v celé knize o 12 kapitolách. Nyní získáš nejčastější 3-tici pro každou z těchto 12 kapitol. K tomu využiješ okenní funkci, která pro každou skupinu vrátí první řádek.
Máš k dispozici tabulku se sloupci word, id, chapter.
- Sloupec
chapterodpovídá číslu kapitoly. - Sloupec
wordodpovídá jednomu slovu v dokumentu. - Sloupec
idodpovídá pozici slova v dokumentu.
Máme také následující dotaz:
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
Z této tabulky lze určit, že první řádek požadovaného výsledku bude:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Tvým úkolem je použít subquery jako poddotaz v rámci většího dotazu a získat nejčastější 3-tici pro každou kapitolu. Výsledek bude mít stejné schéma, ale s jedním řádkem na kapitolu. K získání čísla řádku v rámci každé kapitoly použij ROW_NUMBER().
Toto cvičení je součástí kurzu
Úvod do Spark SQL v Pythonu
Pokyny k cvičení
- Získej nejčastější 3-tici pro každou kapitolu.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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()