3-uplets les plus fréquents par chapitre
Nous allons maintenant utiliser une requête comme sous-requête dans une requête plus grande. Spark SQL prend en charge des fonctionnalités avancées de SQL. Vous avez déjà vu comment trouver les séquences de mots les plus courantes dans un livre entier de 12 chapitres. Vous allez maintenant obtenir le 3-uplet le plus fréquent pour chacun des 12 chapitres. Vous le ferez à l'aide d'une fonction de fenêtrage pour récupérer la première ligne par groupe.
Il existe une table avec les colonnes word, id, chapter.
- La colonne
chaptercorrespond au numéro d'un chapitre. - La colonne
wordcorrespond à un seul mot du document. - La colonne
idcorrespond à la position du mot dans le document.
Nous avons aussi la requête suivante :
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
À partir de ce tableau, vous pouvez déterminer que la première ligne du résultat attendu sera :
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Votre tâche consiste à utiliser subquery comme sous-requête dans une requête plus grande afin d'obtenir le 3-uplet le plus fréquent par chapitre. Le résultat attendu aura le même schéma, mais avec une seule ligne par chapitre. Utilisez ROW_NUMBER() pour obtenir le numéro de ligne par ligne et par chapitre.
Cette activité fait partie du cours
Introduction à Spark SQL en Python
Instructions de l’exercice
- Obtenez le 3-uplet le plus fréquent par chapitre.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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()