Aan de slagGa gratis aan de slag

Meest frequente 3-tuples per hoofdstuk

We gaan nu een query als subquery gebruiken in een grotere query. Spark SQL ondersteunt geavanceerde SQL-functies. Eerder leerde je hoe je de meest voorkomende woordreeksen vindt over een hele tekst met 12 hoofdstukken. Nu ga je de meest frequente 3-tuple voor elk van de 12 hoofdstukken ophalen. Dat doe je met een windowfunctie om per groep de bovenste rij op te halen.

Er is een tabel met de kolommen word, id, chapter.

  1. De kolom chapter komt overeen met het nummer van een hoofdstuk.
  2. De kolom word staat voor één woord in het document.
  3. De kolom id komt overeen met de positie van het woord in het document.

We hebben ook de volgende query:

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

Uit deze tabel kun je afleiden dat de eerste rij van het gewenste resultaat zal zijn:

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

Je taak is om subquery te gebruiken als subquery in een grotere query om de meest frequente 3-tuple per hoofdstuk te verkrijgen. Het gewenste resultaat heeft hetzelfde schema, maar met één rij per hoofdstuk. Gebruik ROW_NUMBER() om het rijnummer per rij per hoofdstuk te bepalen.

Deze oefening maakt deel uit van de cursus

Introductie tot Spark SQL in Python

Cursus bekijken

Oefeninstructies

  • Haal de meest frequente 3-tuple per hoofdstuk op.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

#   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 bewerken en uitvoeren