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.
- Kolumnen
chaptermotsvarar ett kapitelnummer. - Kolumnen
wordmotsvarar ett enskilt ord i dokumentet. - Kolumnen
idmotsvarar 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
Ö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()