Kom igångKom igång gratis

Vanligaste 3-tuplarna per kapitel

Nu ska vi använda en fråga som en underfråga i en större fråga. Spark SQL stöder avancerade SQL-funktioner. Tidigare lärde du dig att hitta de vanligaste ordsekvenserna i en hel bok med 12 kapitel. Nu ska du ta fram den vanligaste 3-tupeln för vart och ett av de 12 kapitlen. Det gör du med hjälp av en fönsterfunktion för att hämta den översta raden per grupp.

Det finns en tabell med kolumnerna word, id och chapter.

  1. Kolumnen chapter motsvarar ett kapitelnummer.
  2. Kolumnen word motsvarar ett enskilt ord i dokumentet.
  3. Kolumnen id motsvarar ordets position i dokumentet.

Vi har också följande fråga:

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

Utifrån den här tabellen kan du avgöra att den första raden i det önskade resultatet blir:

+-------+---+-----+----+-----+
|chapter| w1|   w2|  w3|count|
+-------+---+-----+----+-----+
|      1| up|   to| the|    6|
+-------+---+-----+----+-----+

Din uppgift är att använda subquery som en underfråga i en större fråga för att ta fram den vanligaste 3-tupeln per kapitel. Resultatet ska ha samma schema, men med en rad per kapitel. Använd ROW_NUMBER() för att beräkna radnumret per rad och kapitel.

Den här övningen är en del av kursen

Introduktion till Spark SQL i Python

Visa kurs

Övningsinstruktioner

  • Hämta den vanligaste 3-tupeln per kapitel.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

#   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()
Redigera och kör kod