1. Nauka
  2. /
  3. Kursy
  4. /
  5. Wprowadzenie do Spark SQL w Pythonie

Connected

ćwiczenie

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.

  1. Kolumna chapter odpowiada numerowi rozdziału.
  2. Kolumna word odpowiada pojedynczemu słowu w dokumencie.
  3. Kolumna id odpowiada 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.

Instrukcje

100 XP
  • Pobierz najczęstszą 3-krotkę dla każdego rozdziału.