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.
- La colonna
chaptercorrisponde al numero del capitolo. - La colonna
wordcorrisponde a una singola parola nel documento. - La colonna
idcorrisponde 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
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()