Häufigste 3-Tupel pro Kapitel
Wir verwenden jetzt eine Abfrage als Unterabfrage in einer größeren Abfrage. Spark SQL unterstützt fortgeschrittene SQL-Funktionen. Zuvor hast du gelernt, wie du die häufigsten Wortsequenzen über ein ganzes Buch mit 12 Kapiteln findest. Jetzt ermittelst du das häufigste 3-Tupel für jedes der 12 Kapitel. Du machst das mit einer Window-Funktion, um die oberste Zeile pro Gruppe zu holen.
Es gibt eine Tabelle mit den Spalten word, id, chapter.
- Die Spalte
chapterentspricht der Nummer eines Kapitels. - Die Spalte
wordentspricht einem einzelnen Wort im Dokument. - Die Spalte
identspricht der Wortposition im Dokument.
Außerdem haben wir die folgende Abfrage:
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
Aus dieser Tabelle kannst du ableiten, dass die erste Zeile des gewünschten Ergebnisses so aussieht:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Deine Aufgabe ist es, subquery als Unterabfrage in einer größeren Abfrage zu verwenden, um das häufigste 3-Tupel pro Kapitel zu erhalten. Das gewünschte Ergebnis hat dasselbe Schema, aber jeweils nur eine Zeile pro Kapitel. Verwende ROW_NUMBER(), um die Zeilennummer pro Zeile und Kapitel zu bestimmen.
Diese Übung ist Teil des Kurses
Einführung in Spark SQL mit Python
Anleitung zur Übung
- Ermittle das häufigste 3-Tupel pro Kapitel.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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()