IniziaInizia gratis

Triplle (3-tuples) più frequenti per capitolo

Ora useremo una query come sottoquery in una query più ampia. Spark SQL supporta funzionalità avanzate di SQL. In precedenza hai imparato a trovare le sequenze di parole più comuni nell'intero libro composto da 12 capitoli. Adesso otterrai la tripla più frequente per ognuno dei 12 capitoli. Lo farai usando una funzione finestra per recuperare la riga in cima per ciascun gruppo.

C'è una tabella con le colonne word, id, chapter.

  1. La colonna chapter corrisponde al numero del capitolo.
  2. La colonna word corrisponde a una singola parola nel documento.
  3. La colonna id corrisponde alla posizione della parola nel documento.

Abbiamo anche la seguente 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

Da questa tabella puoi determinare che la prima riga del risultato desiderato sarà:

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

Il tuo compito è usare subquery come sottoquery in una query più grande per ottenere la tripla più frequente per capitolo. Il risultato desiderato avrà lo stesso schema, ma con una riga per capitolo. Usa ROW_NUMBER() per ottenere il numero di riga per riga e per capitolo.

Questo esercizio fa parte del corso

Introduzione a Spark SQL in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Ottieni la tripla più frequente per capitolo.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

#   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()
Modifica ed esegui il codice