LoslegenKostenlos loslegen

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.

  1. Die Spalte chapter entspricht der Nummer eines Kapitels.
  2. Die Spalte word entspricht einem einzelnen Wort im Dokument.
  3. Die Spalte id entspricht 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

Kurs anzeigen

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()
Code bearbeiten und ausführen