Najczęstsze 3-krotki dla każdego rozdziału
Teraz użyjemy zapytania jako podzapytania w większym zapytaniu. Spark SQL obsługuje zaawansowane funkcje SQL. Wcześniej poznałeś sposób znajdowania najczęstszych sekwencji słów w całej książce składającej się z 12 rozdziałów. Teraz wyznaczysz najczęstszą 3-krotkę dla każdego z tych 12 rozdziałów. Skorzystasz w tym celu z funkcji okna, aby pobrać górny wiersz z każdej grupy.
Dostępna jest tabela zawierająca kolumny word, id, chapter.
- Kolumna
chapterodpowiada numerowi rozdziału. - Kolumna
wordodpowiada pojedynczemu słowu w dokumencie. - Kolumna
idodpowiada pozycji słowa w dokumencie.
Disponujemy również następującym zapytaniem:
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
Na podstawie tej tabeli można ustalić, że pierwszy wiersz oczekiwanego wyniku będzie wyglądał następująco:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Twoim zadaniem jest użycie subquery jako podzapytania w większym zapytaniu, aby uzyskać najczęstszą 3-krotkę dla każdego rozdziału. Wynik będzie miał ten sam schemat, ale z jednym wierszem na rozdział. Użyj ROW_NUMBER(), aby wyznaczyć numer wiersza dla każdego wiersza w obrębie rozdziału.
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark SQL w Pythonie
Instrukcje do ćwiczenia
- Pobierz najczęstszą 3-krotkę dla każdego rozdziału.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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()