Meest frequente 3-tuples per hoofdstuk
We gaan nu een query als subquery gebruiken in een grotere query. Spark SQL ondersteunt geavanceerde SQL-functies. Eerder leerde je hoe je de meest voorkomende woordreeksen vindt over een hele tekst met 12 hoofdstukken. Nu ga je de meest frequente 3-tuple voor elk van de 12 hoofdstukken ophalen. Dat doe je met een windowfunctie om per groep de bovenste rij op te halen.
Er is een tabel met de kolommen word, id, chapter.
- De kolom
chapterkomt overeen met het nummer van een hoofdstuk. - De kolom
wordstaat voor één woord in het document. - De kolom
idkomt overeen met de positie van het woord in het document.
We hebben ook de volgende query:
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
Uit deze tabel kun je afleiden dat de eerste rij van het gewenste resultaat zal zijn:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Je taak is om subquery te gebruiken als subquery in een grotere query om de meest frequente 3-tuple per hoofdstuk te verkrijgen. Het gewenste resultaat heeft hetzelfde schema, maar met één rij per hoofdstuk. Gebruik ROW_NUMBER() om het rijnummer per rij per hoofdstuk te bepalen.
Deze oefening maakt deel uit van de cursus
Introductie tot Spark SQL in Python
Oefeninstructies
- Haal de meest frequente 3-tuple per hoofdstuk op.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()